[問題] OpenCV 未寫入的 Mat 被連帶改變(已解決)

看板C_and_CPP (C/C++)作者 (800IM)時間14年前 (2012/05/18 21:46), 編輯推噓0(006)
留言6則, 1人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2010 Pro 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) OpenCV 2.3.3 問題(Question): 未寫入的影像陣列 Mat 被改變了 餵入的資料(Input): 彩色影像 預期的正確結果(Expected Output): 秀出一張過濾色 + 另一張未過濾彩色圖 錯誤結果(Wrong Output): 兩張都被過濾 程式碼(Code):(請善用置底文網頁, 記得排版) Img=cv::imread(FileName,1); ImgResult=Img; /*過濾紅色(BGR排列)*/ for(int i=0;i<Img.rows;i++){ for(int j=0;j<Img.cols;j++){ if(Img.at<cv::Vec3b>(i,j)[2] > (Img.at<cv::Vec3b>(i,j)[0] + Img.at<cv::Vec3b>(i,j)[1])) { ImgResult.at<cv::Vec3b>(i,j)[2]=255; } else { ImgResult.at<cv::Vec3b>(i,j)[0]=0; ImgResult.at<cv::Vec3b>(i,j)[1]=0; ImgResult.at<cv::Vec3b>(i,j)[2]=0; } } } cv::imshow("Img",Img); cv::imshow("ImgResult",ImgResult); cv::waitKey(0); ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.224.55.75 ※ 編輯: deo2000 來自: 61.224.55.75 (05/18 22:00)

05/18 22:01, , 1F
因為你用=會讓兩個連帶處理
05/18 22:01, 1F
但是只有這一段程式碼會連帶處理耶! 後面的都不會了,怎麼會這樣?

05/18 22:02, , 2F
改成ImgResult=Img.clone();
05/18 22:02, 2F
感謝! 給我這個提示去找ref manual 發現 Img.copyTo(ImgResult); 也可以 ※ 編輯: deo2000 來自: 61.224.55.75 (05/18 22:32)

05/18 23:15, , 3F
其實都ok,但我覺得用clone比較直覺點,不知道速度
05/18 23:15, 3F

05/18 23:15, , 4F
上有沒有差。
05/18 23:15, 4F

05/18 23:16, , 5F
話說你這個怎麼不用內建function濾掉?
05/18 23:16, 5F

05/18 23:17, , 6F
速度差很多,之前測threshod就差了70倍有
05/18 23:17, 6F
因為我找了一整個晚上,沒有發現適合的 function 只有 cv::inRange 可以設定上下界做 band pass,不能自由的做其他邏輯運算 ※ 編輯: deo2000 來自: 61.224.55.75 (05/18 23:24) ※ 編輯: deo2000 來自: 61.224.55.75 (05/19 01:12)
文章代碼(AID): #1FjbAul3 (C_and_CPP)
文章代碼(AID): #1FjbAul3 (C_and_CPP)