這兩天定義某圖像的ROI時發現, 有時會出現不正常的情況
比如 Rect的位置移位, 偶爾伴有圖像邊框附近出現異常像素
或者幹脆整個都是圖像都變化了
具體什麼原因不太清楚, 可能與記憶體有關, 因為這中間用了好幾個Mat交換資料, 雖然關鍵的地方都用了clone
将定義放到了最前端之後, 這種異常暫時還未出現過
截圖的話以後遇到再截吧, 因為現在已經不出現了
---------------------------
關于自定義ROI , 順便多說兩句怎麼自定義ROI
1. 定義 cv::Rect
cv::Mat regionsOfinterest(src,rect);
cv::Mat img;
regionsOfinterest.copyTo(img);
2. class Range (基本資料類型)
imageROI=image(cv::Range(image.rows-logo.rows,image.rows),
cv::Range(image.cols-logo.cols,image.cols));
3. 和第一個類似, 利用了cv::Mat 普通拷貝 實際上是拷貝了指針且指向的是同一塊記憶體(個人了解)
imageROI= image(cv::Rect(image.cols-logo.cols,image.rows-logo.rows,logo.cols,logo.rows));
cv::Mat mask(logo);
logo.copyTo(imageROI,mask);
注意: src.copyTo(dst,mask); 若是src與dst是同一塊記憶體, 就相當于什麼都沒做
自定義不規則形狀的mask時, 不能 src.copyTo(src,mask);
4. void bitwise_and( InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray() )
可以将src1與src2用一個src輸入, 然後根據mask 提取roi
5. Mat& Mat::setTo( InputArray value, InputArray mask=noArray() ) , 置mask區域為指定像素
image.setTo(cv::Scalar s, cv::Mat mask);
6. inRange() 得到二值化圖像, 常用來提供mask
7.Mat::locateROI
8.Mat::adjustROI