做目标检测的很多时候,需要我们选择一个相对固定的区域来识别目标。
思路很简单,适合相机固定,ROI变化不大的场景。
1、原图备份后先截取不规则的ROI区域,其他区域置为黑背景,检测识别效果
2、在原图上,将上述识别效果画在原图上
主要截取ROI的代码:
cv::Mat image_temp, mask_img;
image_temp = image.clone();//原图的复制图
//原图的复制图用cv::line()画出ROI区域
cv::line(image_temp, cv::Point(430, 107), cv::Point(128, 714), cv::Scalar(255, 255, 255), 2);
cv::line(image_temp, cv::Point(128, 714), cv::Point(1054, 714), cv::Scalar(255, 255, 255), 2);
cv::line(image_temp, cv::Point(1054, 714), cv::Point(922, 161), cv::Scalar(255, 255, 255), 2);
cv::line(image_temp, cv::Point(922, 161), cv::Point(430, 107), cv::Scalar(255, 255, 255), 2);
mask_img = cv::Mat::zeros(image_temp.size(), image_temp.type());// 黑色的掩码图
//掩码图画ROI区域和上图区域一致
cv::line(mask_img, cv::Point(430, 107), cv::Point(128, 714), cv::Scalar(255,255, 255), 2);
cv::line(mask_img, cv::Point(128, 714), cv::Point(1054, 714), cv::Scalar(255, 255, 255), 2);
cv::line(mask_img, cv::Point(1054, 714), cv::Point(922, 161), cv::Scalar(255, 255, 255), 2);
cv::line(mask_img, cv::Point(922, 161), cv::Point(430, 107), cv::Scalar(255, 255, 255), 2);
cv::Rect ccomp;
cv::floodFill(mask_img, cv::Point(500, 250), cv::Scalar(255, 255, 255), &ccomp, cv::Scalar(20, 30, 40), cv::Scalar(20, 30, 40));//漫水填充
cv::bitwise_and(image_temp, mask_img, image_temp);// 与处理
cv::bitwise_and(image_temp, mask_img, image_temp);
任何颜色像素与白色像素与关系运算,都是这个颜色,任何像素与黑色像素与关系运算,都是黑色像素。
漫水填充:https://blog.csdn.net/xddwz/article/details/111483004
原图复制图的ROI区域
掩码图的ROI区域:
漫水填充:
与运算图:
上图的检测结果,原图上画出来(识别效果不咋地):
参考:https://blog.csdn.net/qq_41629756/article/details/116239296