ROI,即:region of interest,感兴趣区域。也就是从图像中选择的一个图像区域,以便进行进一步处理。
尝试从照片中识别铭牌,第一步是查找铭牌所在区域,所用照片如下:
目标是从上图找到这个区域:
首先是要确定边缘,流程如下:
- 加载图片:
Mat srcImage= imread("1.jpg"); // 与c#工程不同,1.jpg文件放置在工程目录下,也就是cpp文件所在的目录.
- 转化为灰度图:
Mat grayImage; cvtColor(srcImage,grayImage,CV_BGR2GRAY);
- 二值化:
Mat binImage; threshold(grayImage, binImage, 90, 255, THRESH_BINARY);
完整的代码如下:
#include<opencv.hpp> usingnamespace cv; int main() { Mat srcImage= imread("1.jpg"); Mat grayImage; cvtColor(srcImage,grayImage,CV_BGR2GRAY); Mat binImage; threshold(grayImage, binImage, 90, 255, THRESH_BINARY); imshow("srcImage", srcImage); imshow("binImage", binImage); cvWaitKey(-1); return 0; }
结果如下:
其中,threshold函数的阈值用90,是试出来的结果:80时左上角有缺失,100时图像中间有分裂。如下图:
这样就存在一个问题,换一张照片90这个阈值可能就不适用了,如下面这张图,即使是90也会造成ROI中间的断痕。
留言列表: