根据您提供的代码,轮廓点的提取部分有一些问题。
首先,在调用cv::findContours()
函数时,应该将轮廓容器作为第一个参数传入。所以,请将下面这行代码:
cv::findContours(src.clone(), contour, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
修改为:
cv::findContours(src.clone(), contour, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
其次,在绘制轮廓时,您使用了三个通道的彩色图像来绘制红色轮廓线。但是,原始的src图像是单通道的灰度图像。在这种情况下,您需要将dst图像也转换为单通道的灰度图像。请修改以下部分代码:
将这段代码注释掉:
std::vector<cv::Mat> rgb;
rgb.push_back(src);
rgb.push_back(src);
rgb.push_back(src);
cv::Mat dst;
cv::merge(rgb, dst);
替换为:
cv::Mat dst = src.clone();
然后,在绘制轮廓点时,可以直接使用dst.at<uchar>(pt) = 255;
将对应位置设置为白色(255),而不需要使用彩色向量。
请尝试修改上述部分,并重新运行代码查看结果。如果仍然存在问题,请及时告知我详细错误信息以便帮助您进一步解决。
内容由零声教学AI助手提供,问题来源于学员提问