cv::cvtColor(src, gray, COLOR_BGR2GRAY);
GaussianBlur(gray, gray, Size(3, 3), 0);//高斯去噪
Mat edge;
cv::Canny(gray, gray,35,38);
//cv::imshow("eddda", gray);
//形态学模板
Mat out;
Mat element = getStructuringElement(MORPH_RECT, Size(10, 10));
Mat element1 = getStructuringElement(MORPH_RECT, Size(5, 5));
morphologyEx(gray, out, MORPH_DILATE, element, Point(-1, -1),2); //形态学应用膨胀
//cv::imshow("edge1" , out);
std::vector<std::vector<Point>> contours;
std::vector<Vec4i> hier;
cv::findContours(out, contours, hier,cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE);
//找出所有的轮廓
Scalar color(0, 0, 255);
char name[20] = {'0'};
std::stringstream str;
Rect p_rct;
for (int i = 0 ,j=0,k=0; i < contours.size(); i++)
{
k++;
p_rct = boundingRect(contours[i]);
std::cout << k << " " << contourArea(contours[i])<<" ," << p_rct.area() << std::endl;
if (hier[i][3] == -1) { //有父轮廓的轮廓
if (contourArea(contours[i]) > 10000.0)
{
j++;
sprintf_s(name,"result1\\test%d.tif", j); //保存文件
imwrite(name, src(boundingRect(contours[i]))); //分割画出来
drawContours(src, contours, i, color, 1, 8);
}
}
}
图像分割opencv版本
最新推荐文章于 2024-05-21 14:44:09 发布