致敬小乌龟 2023-11-25 23:16 采纳率: 0%
浏览 11
已结题

drawcontours

opencv中的drawcontours函数运行过程中总报错,什么原因

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-26 08:27
    关注

    【相关推荐】



    • 看下这篇博客,也许你就懂了,链接: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;
      }

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月3日
  • 创建了问题 11月25日

悬赏问题

  • ¥20 用c++完成两道大题,要求提供.h和.cpp,以及用来测试的main.cpp
  • ¥15 2024电赛H题指导
  • ¥15 第三方如何控制E8a进行烧录
  • ¥15 关于lua调用DLL的c/c++动态库(相关搜索:数据库)
  • ¥15 openwrt结合智能家居(相关搜索:路由器)
  • ¥15 求一款免费的pdf编辑js,web端用的
  • ¥15 求分析下图晶体与三极管组成的振荡电路
  • ¥100 多线程+连接池+代理 运行一段时间线程阻塞
  • ¥15 关于#单片机#的问题:求一个使用C语言将重力加速度gx,gy,gz积分获取到速度的代码(相关搜索:c语言)
  • ¥15 matlab导致电脑重启问题