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; }
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥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导致电脑重启问题