opencv中的drawcontours函数运行过程中总报错,什么原因
1条回答 默认 最新
关注【相关推荐】
- 看下这篇博客,也许你就懂了,链接:Opencv drawContours函数用于绘制和填充
- 除此之外, 这篇博客: Opencv 笔记9 轮廓中的 drawContours 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
drawContours( InputOutputArray binImg, // 绘制的轮廓的图像矩阵 OutputArrayOfArrays contours, //找到的全部轮廓对象 Int contourIdx, //轮廓索引号 表示指定一个轮廓进行绘制;若为负数,表示绘制所有轮廓 const Scalar & color, //绘制颜色 int thickness, //绘制线宽 int lineType, //线的类型(默认8) InputArray hierarchy, //拓扑结构图 int maxlevel, //最大层数(0只绘制当前的,1表示绘制绘制当前及其内嵌的轮廓) Point offset=Point(), //轮廓位移 )

代码显示(代码是随便写得,很多细节不考虑):const char* INPUT_TITLE = "INPUT-IMAGE1"; const char* OUT_TITLE = "OUT_WIN"; Mat base, src, src2, map_x, map_y, dst, src_gary, temp; int max_Threshod = 255; int Threshod_value = 100; void Callback_Canny(int, void*); void Callback_Canny(int, void*) { Mat cannyoutput; vector<vector<Point>> contours; vector<Vec4i> hierachy;// 拓补结构层次 // 2 、使用canny 算子来提取边缘 得到一个2值化的图像 Canny(src_gary, cannyoutput, Threshod_value, Threshod_value * 2, 3, false); imshow("Canny", cannyoutput); Mat element = getStructuringElement(MORPH_CROSS, Size(10, 1), Point(-1, -1)); dilate(cannyoutput, cannyoutput, element, Point(-1, -1), 2); imshow("dilate", cannyoutput); threshold(cannyoutput, cannyoutput,0,255, THRESH_OTSU + THRESH_BINARY); imshow("threshold", cannyoutput); // 3、 找到轮廓 findContours(cannyoutput, contours, hierachy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point(0, 0)); // 4 画出轮廓 dst = Mat::zeros(src_gary.size(), CV_8SC3); base = src.clone(); RNG r(12345); for (size_t i = 0; i < contours.size(); i++) { Scalar sc = Scalar(r.uniform(0, 255), r.uniform(0, 255), r.uniform(0, 255)); drawContours(dst, contours, i, sc, 2, 8, hierachy, 0, Point(0, 0)); drawContours(base, contours, i, sc, 2, 8, hierachy, 0, Point(0, 0)); } imshow(OUT_TITLE, dst); imshow(OUT_TITLE, base); } int main(int args, char* arg) { //目标图像 src = imread("C:\\Users\\19473\\Desktop\\opencv_images\\501.png"); if (!src.data) { printf("could not load image....\n"); } namedWindow(INPUT_TITLE, CV_WINDOW_AUTOSIZE); imshow(INPUT_TITLE, src); namedWindow(OUT_TITLE, CV_WINDOW_AUTOSIZE); // 1,将这个图像转换成灰度图像 cvtColor(src, src_gary, CV_BGR2GRAY); GaussianBlur(src_gary, src_gary,Size(3,3),1); createTrackbar(" Threshod:", OUT_TITLE, &Threshod_value, max_Threshod, Callback_Canny); Callback_Canny(0, 0); waitKey(0); return 0; }
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报