关于vc调用findContour出现以下崩溃问题,
搜索了网上有很多解决方案,最后发现都不能解决我的问题。经过几天的跟踪测试,发现该函数的第一个参数必须是单通道图像数据:
vector<vector<Point>> contours; //这里要用全局变量,不知为什么?
vector<Vec4i> hierarchy;
cv::Mat srcImage;
//
void FindObj(void)
{
srcImage = imread("d:\\1.bmp");
srcImage = srcImage > 119; //转换成二值图像,问题就出在这里,因为通过下面语句可以看到srcImage的通道是3
int i1 = srcImage.channels(); //i1的值是3,但findContours要求是单通道1
findContours(srcImage, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE);
}
------------------------------------------------
上述代码稍作修改,即可解决:
void FindObj(void)
{
srcImage = imread("d:\\1.bmp");
cvtColor(srcImage, srcImage, CV_BGR2GRAY,1);//转换成单通道
srcImage = srcImage > 119; //图像二值化
int i1 = srcImage.channels(); /通道值是1,
findContours(srcImage, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE);
}