问题描述:今天打算利用最小外接矩计算物资的偏移角度(后面搞完会写的),我将之前闭运算后的结果图作为初始图传入,计算最小外接矩其中一个步骤就是前面做过的寻找轮廓,由于外接矩的结果不理想,所以逐步调试,最终在寻找轮廓这步,竟然找到了100多个轮廓。
闭运算效果图:
使用形态学滤波,已经可以清楚的找到了12个矩形。可是使用findCountours()函数寻找轮廓数量的时候,竟然找到的111个轮廓
原因分析:
在前面将三维转换成二维图像的时候,将三维点的z转换成二维图像中的灰度值
Mat Image = Mat(row, col,CV_8UC3);
int k = 0;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
Image.at<cv::Vec3b>(i, j)[0] = Points[k].G;
Image.at<cv::Vec3b>(i, j)[1] = Points[k].G;
Image.at<cv::Vec3b>(i, j)[2] = Points[k].G;
k++;
//cout << k << endl;
}
}
定义的时候,二维图像就是一个三通道的图像,最后得到的只是灰度图像,而并不是灰度化的图像,灰度化的图像应该是单通道的。下面左图是三通道灰度图像的详细信息,右图是单通道灰度化后的图像详细信息:
因为这个原因,所以后面的二值化也都是三通道的,所以在寻找轮廓的时候,就会有大量的杂乱轮廓,因为之前先把图像灰度,二值,闭运算处理后,虽然看不到那些细小的轮廓,但是,你看不看得见,他一直在~~所以图像通道对图像的处理有着巨大的影响,与大家共勉~~