提取不规则感兴趣区域
void anomalyRoi(Mat &src, Mat &dst)
{
Mat original = src.clone();
GaussianBlur(original, original, Size(3, 3), 11, 11, 4);
cvtColor(original, original, COLOR_RGB2GRAY);
Mat threshold_image;
threshold(original, threshold_image, 90, 225, 3);
Mat morphologyKernel = getStructuringElement(MORPH_RECT, Size(1, 3));
morphologyEx(threshold_image, threshold_image, CV_MOP_CLOSE, morphologyKernel);
Canny(threshold_image, threshold_image, 45, 45 * 3);
imshow("Canny", threshold_image);
vector<vector<Point>> contours;
vector<Vec4i> hireachy;
findContours(threshold_image, contours, hireachy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, Point(-1, -1));
int flag_count = 0;
Mat show_threImage = Mat::zeros(threshold_image.size(), CV_8UC3);
double s_area = 0;
for (size_t i = 0; i < contours.size(); i++)
{
drawContours(show_threImage, contours, static_cast<int>(i), Scalar(255, 255, 255), 2, 8, hireachy, 0, Point());
double area = contourArea(contours[i]);
if (s_area < area)
{
s_area = area;
}
else
{
s_area = s_area;
}
if (area == s_area)
{
flag_count = static_cast<int>(i);
}
else
{
flag_count = flag_count;
}
}
imshow("Draw_Image_Contours", show_threImage);
Mat gray(src.size(), src.type(), Scalar(0, 0, 0));
drawContours(gray, contours, flag_count, Scalar(255, 255, 255), 4, 8, hireachy, 0, Point());
namedWindow("gray", 0);
imshow("gray", gray);
Rect s = boundingRect(contours[flag_count]);
floodFill(gray, Point(s.x + s.width / 2, s.y + s.height / 2), Scalar(255,255,255));
bitwise_and(src, gray, dst);
}