[問題] OPENCV想做圖片比對
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
DevC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
OpenCV
問題(Question):
不知道程式碼要怎麼使用
補充說明(Supplement):
最近專題老師要我們接觸OpenCV這個函數庫
老師目前給我們的題目是把視訊畫面截取下來(存成灰度或黑白)
然後兩張兩張圖做圖片的比對
希望說當發現兩張圖的差異到達某個值後判定畫面中有物體在移動
目前我們已經將視訊的圖每一秒用Cvsave存成個圖檔
可是不知道要怎麼把前後兩張圖放一起做比對
目前想到的方法是一個一個相素去取值
網路上找到幾個程式碼可是不知道該怎麼放在程式中始用
----------------------------------------------------------------------------
1.直接訪問: (效率高,但容易出錯)
對於單通道位元組型圖像:
IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
((uchar *)(img->imageData + i*img->widthStep))[j]=111;
2.間接訪問: (通用,但效率低,可訪問任意格式的圖像)
對於單通道位元組型圖像:
IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
CvScalar s;
s=cvGet2D(img,i,j);
/* get the (j,i) pixel value, 註意cvGet2D與cvSet2D中坐標參數的順序
與其它opencv函數坐標參數順序恰好相反.本函數中i代表y軸,即height;
j代表x軸,即weight.*/
printf("intensity=%f\n",s.val[0]);
s.val[0]=111;
cvSet2D(img,i,j,s); // set the (j,i) pixel value
3.基於指針的直接訪問: (簡單高效)
對於單通道位元組型圖像:
IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
int height = img->height;
int width = img->width;
int step = img->widthStep/sizeof(uchar);
uchar* data = (uchar *)img->imageData;
data[i*step+j] = 111;
來源網址:http://goo.gl/oL3MS (點 4 四、圖像處理 的 4.3 3、訪問圖像像素 )
http://goo.gl/Ayb9l (點 2.2 怎麼訪問圖像像素)
----------------------------------------------------------------------------
小弟和組員都不是程式的高手
所以只能上來請教各位程式神手了...
如果有除了上面之外更好的比對方法也歡迎跟我們講
因為上面的想法只是老師給我們的一個方向而已
拜託大家了~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.64.105
推
04/25 20:53, , 1F
04/25 20:53, 1F
→
04/25 20:57, , 2F
04/25 20:57, 2F
推
04/25 23:32, , 3F
04/25 23:32, 3F
→
04/25 23:33, , 4F
04/25 23:33, 4F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章