这是后期补充的部分,和前期的代码不太一样
效果图
源代码
//测试
void CCutImageVS2013Dlg::OnBnClickedTestButton1()
{
vector > contours; //轮廓数组
vector centers; //轮廓质心坐标
vector >::iterator itr; //轮廓迭代器
vector::iterator itrc; //质心坐标迭代器
vector > con; //当前轮廓
double area;
double minarea = 1000;
double maxarea = 0;
Moments mom; // 轮廓矩
Mat image, gray, edge, dst;
image = imread("D:\\66.png");
cvtColor(image, gray, COLOR_BGR2GRAY);
Mat rgbImg(gray.size(), CV_8UC3); //创建三通道图
blur(gray, edge, Size(3, 3)); //模糊去噪
threshold(edge, edge, 200, 255, THRESH_BINARY_INV); //二值化处理,黑底白字
//--------去除较小轮廓,并寻找最大轮廓--------------------------
findContours(edge, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); //寻找轮廓
itr = contours.begin(); //使用迭代器去除噪声轮廓
while (itr != contours.end())
{
area = contourArea(*itr); //获得轮廓面积
if (area
{
itr = contours.erase(itr); //itr一旦erase,需要重新赋值
}
else
{
itr++;
}
if (area>maxarea) //寻找最大轮廓
{
maxarea = area;
}
}
dst = Mat::zeros(image.rows, image.cols, CV_8UC3);
/*绘制连通区域轮廓,计算质心坐标*/
Point2d center;
itr = contours.begin();
while (itr != contours.end())
{
area = contourArea(*itr);
con.push_back(*itr); //获取当前轮廓
if (area == maxarea)
{
vector boundRect(1); /