RandShuffle的使用
#include <cv.h>
#include <highgui.h>
int main()
{
IplImage *Image1,*Image2;
Image1=cvLoadImage("bicycle.jpg",1);
Image2=cvCloneImage(Image1);
CvRNG rng;
rng = cvRNG(cvGetTickCount());
double IterFactor=0.1;
cvRandShuffle(Image2,
&
rng,IterFactor);cvNamedWindow("Bicycle",1);
cvShowImage("Bicycle",Image1);
cvNamedWindow("Bicycle Rand Shuffle",1);
cvShowImage("Bicycle Rand Shuffle",Image2);
cvWaitKey(0);
}
圖片:

執行結果:
(1)IterFactor=0.1
(把圖片放大,其實有雜訊的)
(2)IterFactor=1
(隨機了640*480次,但仍看的到影像輪廓)
用出來的結果很像胡椒鹽雜訊(Salt-and-peper noise),但實際上不是,cvRandShuffle()的第三個參數放的是交換數,為double型別,可以用小數去代替,這邊用0.1,原圖影像為640*480則它隨機交換的次數是640*480*0.1,IterFactor大於1以上圖片就很難辨識清楚了,因為它幾乎所有點都被交換過了(640*480*1),不過他選定交換的點是隨機的,所以用1的話仍然可以看的見圖形模糊的輪廓.這邊他交換的是R+G+B的像素值(pixel),也就是說他會依照圖片的格式做座標的交換,不用擔心它交換的只是一個單一的數值.
cvRandShuffle()
將CvMat矩陣或IplImage圖片做隨機座標交換,隨機交換的個數由第三個參數來做決定.第三個參數為長*寬*IterFactor的結果.
cvRandShuffle(CvMat或IplImage資料結構,CvRNG資料結構,交換的比率參數)
0 意見:
張貼留言