[問題] OPENCV想做圖片比對

看板C_and_CPP (C/C++)作者時間15年前 (2011/04/25 19:54), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/1
開發平台(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
最簡單應該是... cvAbsDiff, cvThreshold, cvCountNonZero.
04/25 20:53, 1F

04/25 20:57, , 2F
我是用cvThreshold把視訊轉成黑白的~
04/25 20:57, 2F

04/25 23:32, , 3F
在2.2版後推薦使用c++ API的cv::Mat 不要再用iplimage
04/25 23:32, 3F

04/25 23:33, , 4F
QQ 我之前灌2.2一直不能成功就灌2.0了.....
04/25 23:33, 4F
文章代碼(AID): #1DjM3jib (C_and_CPP)
文章代碼(AID): #1DjM3jib (C_and_CPP)