这两天定义某图像的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