-
2021-12-09 11:06:23
findContours函数用于在二值图中寻找轮廓。
void cv::findContours ( InputArray image, OutputArrayOfArrays contours, //检测到的轮廓,运算结果存储在这,每一个轮廓存储为一个点向量,即point类型中的vector表示 OutputArray hierarchy,//可选的输出向量,包含图像的拓扑信息,每个轮廓contours[i]对应4个hierarchy元素hierarchy[i][0]--[i][3]分别表示后一个轮廓,前一个轮廓,父轮廓,内嵌轮廓的索引编号。 int mode, //轮廓检索模式 int method, // 轮廓近似方法 Point offset = Point()
// 每个轮廓点的可选偏移量) findContours常与drawContours()函数配合使用
例如:
vector<vector<Point>>contours;
findContours(img,contours,RETR_EXTERNAL,CHAIN_APPROX_NONE);
drawContour:
void cv::drawContours ( InputOutputArray image, InputArrayOfArrays contours,//所有输入的轮廓,每个轮廓存储为一个点向量 int contourIdx, // 轮廓绘制的指示变量,若为负则绘制所有轮廓 const Scalar & color, int thickness = 1
, //线条粗细int lineType = LINE_8
, //线条类型InputArray hierarchy = noArray()
, //可选层次结构信息int maxLevel = INT_MAX
,//用于绘制轮廓的最大等级Point offset = Point()
//可选轮廓偏移参数) 案例:
#include<iostream> #include<opencv2/opencv.hpp> #include<opencv2/imgproc.hpp> #include<opencv2/highgui.hpp> using namespace std; using namespace cv; //全局变量随机函数 RNG rng(12345); int main() { Mat src = imread("C:/Users/Administrator/Desktop/3.png"); if (src.empty()) { cout << "请检查图片是否存在..." << endl; return -1; } Mat grayimg; cvtColor(src, grayimg, COLOR_BGR2GRAY); blur(grayimg, grayimg, Size(5, 5)); namedWindow("src"); imshow("src", src); //初始化阈值 int thresh = 80, thresh_max = 255; Mat edgeimg; Canny(grayimg, edgeimg, thresh, thresh * 2, 3); //查找轮廓 vector<vector<Point>>contours; vector<Vec4i>hierarchy; findContours(edgeimg, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0)); //绘制轮廓 Mat drawimg = Mat::zeros(edgeimg.size(), CV_8UC3); for (int i = 0; i < contours.size(); i++) { //drawContours(drawimg, contours, i, Scalar::all(rng.uniform(0, 255)), 2, 8, hierarchy, 0, Point(0, 0)); drawContours(drawimg, contours, i, Scalar(122,160,144), 2, 8, hierarchy, 0, Point(0, 0)); } imshow("dstimg", drawimg); waitKey(0); return 0; }
结果展示:
更多相关内容 -
2_寻找轮廓_
2021-09-30 08:05:59首先将图像变为二值图像发现轮廓,找到图像轮廓通过相关API在轮廓点上找到最小包含矩形和圆,旋转矩形与椭圆。绘制它们 -
4寻找轮廓和画轮廓_轮廓提取_源码
2021-10-04 00:43:22轮廓提取,对图像边缘以及轮廓进行寻找轮廓,并画出轮廓 -
OpenCVSharp入门教程 特征提取②——FindContours寻找轮廓,轮廓提取
2021-07-16 21:50:51OpenCVSharp入门教程 特征提取②——FindContours寻找轮廓,轮廓提取。 一、前文; 二、算法流程; 三、界面布局; 四、功能实现; 4.1 打开图片; 4.2 Canny边缘检测—源码; 4.3 Canny边缘检测—参数讲解; 五、...一、前文
基于边缘检测算法的轮廊寻找和提取
二、算法流程
- 高斯模糊
- Canny边缘检测
- FindContours寻找轮廓,轮廊提取
三、界面布局
- 一个
Label
- N个
Button
- 三个
Picture
四、功能实现
4.1 打开图片
private void openFileBtn_Click(object sender, EventArgs e) { OpenFileDialog openfiledialog = new OpenFileDialog(); openfiledialog.Filter = "PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif"; openfiledialog.RestoreDirectory = true; if (openfiledialog.ShowDialog() == DialogResult.OK) { Console.WriteLine(openfiledialog.FileName); fileName = openfiledialog.FileName; //Mat src = new Mat("foo.png", LoadMode.Color); Mat src = new Mat(fileName); //Mat src = new Mat(fileName, ImreadModes.Color); var frameBitmap = BitmapConverter.ToBitmap(src); pictureBox1.Image?.Dispose(); pictureBox1.Image = frameBitmap; } }
4.2 FindContours轮廓提取—源码
private void contoursBtn_Click(object sender, EventArgs e) { cannyBtn_Click(sender, e); mOutput = new Mat(mInput.Rows, mInput.Cols, MatType.CV_8UC4); mInput.CopyTo(mOutput); RetrievalModes mode = RetrievalModes.External; ContourApproximationModes method = ContourApproximationModes.ApproxNone; Point offset = new OpenCvSharp.Point(0, 0); Cv2.FindContours( image: edges, contours: out OpenCvSharp.Point[][] contours, hierarchy: out HierarchyIndex[] outputArray, mode: mode, method: method, offset: offset); for (int i = 0; i < contours.Length; i++) { Scalar color = Scalar.RandomColor(); if (contours[i].Length > 100) { Cv2.DrawContours( mOutput, contours, contourIdx: i, color: color, thickness: 2, lineType: LineTypes.Link8, hierarchy: outputArray, maxLevel: 0); } } srcPictureBox.Image = BitmapConverter.ToBitmap(mInput); grayPictureBox.Image = BitmapConverter.ToBitmap(edges); dstPictureBox.Image = BitmapConverter.ToBitmap(mOutput); }
4.3 FindContours轮廓提取—参数讲解
// // 摘要: // Finds contours in a binary image. // // 参数: // image: // Source, an 8-bit single-channel image. Non-zero pixels are treated as 1’s. Zero // pixels remain 0’s, so the image is treated as binary. The function modifies the // image while extracting the contours. // // contours: // Detected contours. Each contour is stored as a vector of points. // // hierarchy: // Optional output vector, containing information about the image topology. It has // as many elements as the number of contours. For each i-th contour contours[i], // the members of the elements hierarchy[i] are set to 0-based indices in contours // of the next and previous contours at the same hierarchical level, the first child // contour and the parent contour, respectively. If for the contour i there are // no next, previous, parent, or nested contours, the corresponding elements of // hierarchy[i] will be negative. // // mode: // Contour retrieval mode // // method: // Contour approximation method // // offset: // Optional offset by which every contour point is shifted. This is useful if the // contours are extracted from the image ROI and then they should be analyzed in // the whole image context. public static void FindContours(InputArray image, out Point[][] contours, out HierarchyIndex[] hierarchy, RetrievalModes mode, ContourApproximationModes method, Point? offset = null);
image
,灰度图片输入contours
,轮廓结果输出mode
,轮廓检索模式External
,只检测外层轮廓List
,提取所有轮廓,并放置在list中,检测的轮廓不建立等级关系CComp
,提取所有轮廓,并将轮廓组织成双层结构(two-level hierarchy),顶层为连通域的外围边界,次层位内层边界Tree
,提取所有轮廓并重新建立网状轮廓结构FloodFill
,官网没有介绍,应该是洪水填充法
method
,轮廓近似方法ApproxNone
,获取每个轮廓的每个像素,相邻的两个点的像素位置差不超过1ApproxSimple
,压缩水平方向,垂直方向,对角线方向的元素,值保留该方向的重点坐标,如果一个矩形轮廓只需4个点来保存轮廓信息ApproxTC89L1
,使用Teh-Chinl链逼近算法中的一种ApproxTC89KCOS
,使用Teh-Chinl链逼近算法中的一种
五、运行效果图
从左到右
- 第一张是原图
- 第二张是高斯模糊的结果图
- 第三张是FindContours轮廊提取的结果图
六、参考
觉得好,就一键三连呗(点赞+收藏+关注)
-
opencv python 寻找轮廓/轮廓hierarchy/绘制轮廓
2020-04-28 17:56:53寻找轮廓 简单地解释为连接所有连续点(沿着边界)的曲线,具有相同的颜色或强度. 轮廓是形状分析和物体检测和识别的有用工具 为获得更好的准确性,请使用二值图,在找到轮廓之前,应用阈值法或canny边缘检测 从...寻找轮廓
简单地解释为连接所有连续点(沿着边界)的曲线,具有相同的颜色或强度.
轮廓是形状分析和物体检测和识别的有用工具- 为获得更好的准确性,请使用二值图,在找到轮廓之前,应用阈值法或canny边缘检测
- 从OpenCV 3.2开始,findContours()不再修改源图像,而是将修改后的图像作为三个返回参数中的第一个返回
- 在OpenCV中,查找轮廓是从黑色背景中查找白色对象
findContours(image, mode, method[, contours[, hierarchy[, offset]]])
- image:原图像
- mode:轮廓检索模式
- method:轮廓近似方法
- contours:是一个向量,并且是一个双重向量,向量内每个元素保存了一组由连续的Point点构成的点的集合的向量,每一组Point点集就是一个轮廓。 有多少轮廓,向量contours就有多少元素。
- hierarchy:“vector hierarchy”定义了一个“向量内每一个元素包含了4个int型变量”的向量。
- Point:偏移量,所有的轮廓信息相对于原始图像对应点的偏移量,相当于在每一个检测出的轮廓点上加上该偏移量,并且Point还可以是负值!
输出为: 修改后的图像,轮廓,层次结构
轮廓是所有轮廓的列表.每个单独的轮廓是对象边界点的坐标.
轮廓检索模式 含义 cv2.RETR_EXTERNAL 只检测外轮廓 cv2.RETR_LIST 提取所有轮廓并将其放入列表,不建立等级关系 cv2.RETR_CCOMP 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层 cv2.RETR_TREE 建立一个等级树结构的轮廓 轮廓逼近方法 含义 cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1 cv2.CHAIN_APPROX_SIMPLE 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的拐点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息(contours向量中所有的拐点信息得到了保留,但是拐点与拐点之间直线段的部分省略掉了) cv2.CHAIN_APPROX_TC89_L1 或 cv2.CHAIN_APPROX_TC89_KCOS 应用Teh-Chin链近似算法 代码:
import cv2 import numpy as np img = cv2.imread('img.jpg') imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(imgray, 127, 255, 0) im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
关于hierarchy
hierarchy是个向量数组类型
以mode=CV_RETR_TREE,进行hierarchy的介绍。
CV_RETR_TREE方法为检测所有轮廓,并且建立所有的继承(包含)关系
对于每一个轮廓,hierarchy都包含4个整型数据,分别表示:后一个轮廓的序号、前一个轮廓的序号、子轮廓的序号、父轮廓的序号。
特别注意,上述的含义的不能弄反了!
例如下图(将树结构和轮廓级联系在一起),A和B为同级,可以认为B是A的后一个轮廓,A是B的前一个轮廓;C和D为A的子树,E和F为B的子树,可以认为C和D为A的子轮廓,A为C和D的父轮廓。
为了更加直观,可以利用实际的图像进一步说明轮廓层级的关系,例如以下的源图,一共有4个轮廓,序号分别为0 1 2 3特别地,序号在程序中findcontours函数会自动标记,也是轮廓检索的序号,n个轮廓其检索序号从 0 到 n-1 。
0号轮廓没有同级轮廓,有两个子级轮廓1和3,没有父级轮廓,所以其轮廓继承关系向量hierarchy为[-1 -1 1 -1],-1表示无对应的关系,1表示0号轮廓的一个子轮廓的序号为1号;1号轮廓有同级轮廓3(认为是后一个轮廓,那么无前一个轮廓),也有子级轮廓2,也有父级轮廓0,所以其轮廓继承关系向量hierarchy为[3 -1 2 0];
2号轮廓没有同级轮廓,也没有子级轮廓,但是有父级轮廓1,所以其轮廓继承关系向量hierarchy为[-1 -1 -1 1];
如图所示:
绘制轮廓
cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]])
- image:原图像
- contours:作为Python列表传递的轮廓
- contourIdx:轮廓索引(在绘制单个轮廓时很有用。绘制所有轮廓,传递-1)
•要绘制图像中的所有轮廓:
cv.drawContours(img,contours,-1,(0,255,0),3)•要绘制单个轮廓,比如第4个轮廓:
cv.drawContours(img,contours,3,(0,255,0),3)•但大多数情况下,绘制第4个轮廓,以下方法将非常有用:
cnt = contours[4]
cv.drawContours(img,[cnt],0,(0,255,0),3)代码:
import cv2 import numpy as np img = cv2.imread('img7.png') imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(imgray, 127, 255, 0) im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cnt = contours[0] cv2.drawContours(img,[cnt],0,(0,255,0),3) cv2.imshow('src',img) cv2.waitKey()
二值化图像:
结果图像:
参考文章:
https://blog.csdn.net/dcrmg/article/details/51987348 -
opencv图片二值化寻找轮廓
2021-05-22 13:38:16本文主要是介绍如何根据图片的像素值寻找同一像素值的类,并寻找轮廓圈出图片。 1.二值化 函数原型double threshold( InputArray src,OutputArray dst,double threshold,double maxval,int type ); 参数说明 src:...本文主要是介绍如何根据图片的像素值寻找同一像素值的类,并寻找轮廓圈出图片。
1.二值化函数原型double threshold( InputArray src,OutputArray dst,double threshold,double maxval,int type );
参数说明
src:原始数组,可以是Mat类型。
dst:输出数组,必须与 src 的类型一致。
threshold:阈值
maxval:使用 THRESH_BINARY 和 THRESH_BINARY_INV 的最大值。
type:阈值类型
type=THRESH_BINARY:如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,dst(x,y)=0;
type=THRESH_BINARY_INV:如果 src(x,y)>threshold,dst(x,y) = 0; 否则,dst(x,y) = max_value.
type=THRESH_TRUNC:如果 src(x,y)>threshold,dst(x,y) = max_value; 否则dst(x,y) = src(x,y).
type=THRESH_TOZERO:如果src(x,y)>threshold,dst(x,y) = src(x,y) ; 否则 dst(x,y) = 0。
type=THRESH_TOZERO_INV:如果 src(x,y)>threshold,dst(x,y) = 0 ; 否则dst(x,y) = src(x,y).
原图
二值化处理Mat image = imread("C://Users//lenovo//Desktop//test.jpg",1); cout <<"Original Image channal: "<< image.channels() << endl; imshow("Original Image", image); Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY); imshow("gray Image", gray); cout <<"gray Image channal: "<< gray.channels() << endl; // Wait until user press some key Mat result; threshold(gray, result, 170, 255, THRESH_BINARY); imshow("threshold Image", result);
2.查找轮廓
findContours( InputOutputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode, int method, Point offset=Point());image,单通道图像矩阵,可以是灰度图,但更常用的是二值图像。
contours,定义为“vector<vector> contours”,是一个向量,并且是一个双重向量,向量内每个元素保存了一组由连续的Point(cv定义的数据结构)点构成的点的集合的向量,每一组Point点集就是一个轮廓。 有多少轮廓,向量contours就有多少元素。
hierarchy,定义为“vector hierarchy”, hierarchy向量内每一个元素的4个int型变量——hierarchy[i][0] ~hierarchy[i][3],分别表示第 i个轮廓的后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号。如果当前轮廓没有对应的后一个 轮廓、前一个轮廓、父轮廓或内嵌轮廓的话,则hierarchy[i][0] ~hierarchy[i][3]的相应位被设置为默认值-1。
mode,定义轮廓的检索模式。(opencv3请删除CV_,便可使用)CV_RETR_EXTERNAL;CV_RETR_LIST;CV_RETR_CCOMP;CV_RETR_TREE
method,定义轮廓的近似方法
CV_CHAIN_APPROX_NONE;CV_CHAIN_APPROX_SIMPLE;CV_CHAIN_APPROX_TC89_L1Point偏移量,所有的轮廓信息相对于原始图像对应点的偏移量,相当于在每一个检测出的轮廓点上加上该偏移量,并且Point还可以是负值!
3.轮廓绘制
void drawContours//绘制轮廓,用于绘制找到的图像轮廓
(InputOutputArray image,InputArrayOfArrays contours, int contourIdx,const Scalar& color,int thickness = 1, int lineType = 8,InputArray hierarchy = noArray(), int maxLevel = INT_MAX, Point offset = Point())
image,要绘制轮廓的图像,可以创建一个与原图大小一样的空白图。
contours,所有输入的轮廓,每个轮廓被保存成一个point向量。
color,绘制轮廓所用的颜色。
thickness = 1, 绘制轮廓的线的粗细,如果是负数,则轮廓内部被填充。
lineType = 8, 绘制轮廓的线的连通性。
hierarchy = noArray(),关于层级的可选参数,只有绘制部分轮廓时才会用到。
int maxLevel = INT_MAX,//绘制轮廓的最高级别,这个参数只有hierarchy有效的时候才有效
//maxLevel=0,绘制与输入轮廓属于同一等级的所有轮廓即输入轮廓和与其相邻的轮廓 。
//maxLevel=1, 绘制与输入轮廓同一等级的所有轮廓与其子节点。 //maxLevel=2,绘制与输入轮廓同一等级的所有轮廓与其子节点以及子节点的子节点
**offset = Point()**点的偏移量。
4.完整应用#include <iostream> #include "opencv2/opencv.hpp" using namespace cv; using namespace std; int main() { Mat image = imread("C://Users//lenovo//Desktop//test.jpg",1); cout <<"Original Image channal: "<< image.channels() << endl; imshow("Original Image", image); Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY); imshow("gray Image", gray); cout <<"gray Image channal: "<< gray.channels() << endl; // Wait until user press some key Mat result; threshold(gray, result, 170, 255, THRESH_BINARY); imshow("threshold Image", result); vector<vector<Point>> contours; vector<Vec4i> hierarchy; findContours(result, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point()); Mat imageContours = Mat::zeros(image.size(), CV_8UC1); Mat Contours = Mat::zeros(image.size(), CV_8UC1); //绘制 for (int i=0;i< contours.size();i++) { //contours[i]代表的是第i个轮廓,contours[i].size()代表的是第i个轮廓上所有的像素点数 for (int j = 0; j < contours[i].size(); j++) { //绘制出contours向量所有的像素点 Point P = Point(contours[i][j].x, contours[i][j].y); Contours.at<uchar>(P) = 255; imshow("Contours image", Contours);//点图 } //绘制轮廓 drawContours(imageContours, contours, i,255, 1, 8, hierarchy); } imshow("drawContours image", imageContours); //轮廓 waitKey(0); return 0; }
-
OpenCV-寻找轮廓cv::findContours&绘制轮廓cv::drawContours
2021-05-10 12:56:37分享OpenCV中寻找和绘制轮廓的函数~ -
读取摄像头转换至YCrCb空间寻找轮廓contour.py
2020-04-20 18:29:16读取摄像头转换至YCrCb空间寻找轮廓contour.py保留区域面积最大的轮廓点坐标 -
opencv寻找轮廓--绘制轮廓---轮廓层级原理
2019-06-20 10:58:02流程:原图转灰度图—灰度图转二值图—(滤波)—找轮廓 void findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int met... -
寻找轮廓 find contours
2016-03-28 15:11:00用于寻找轮廓 -
Opencv之寻找轮廓函数findContours
2019-05-30 15:20:35取值二:CV_RETR_LIST 检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关 系,彼此之间独立,没有等级关系,这就意味着这个检索模式下不存在父轮廓或内嵌轮廓, 所以hierarchy向量内所有元素的第3... -
Opencv:图像寻找轮廓外接矩形Python实现
2019-11-12 11:06:08二值图像寻找轮廓外接矩形 一、内容 图像二值图像的每个轮廓,OpenCV都提供了API可以求取轮廓的外接矩形,其中求取轮廓外接矩形API解释如下: atedRect cv::minAreaRect( InputArray points ) 输入参数points... -
OpenCV在图像中寻找轮廓
2014-06-08 13:54:11使用OpenCV在图像中寻找轮廓 目标 在这个教程中你将学到如何: 使用OpenCV函数 findContours 使用OpenCV函数 drawContours -
opencv寻找轮廓
2011-10-11 11:38:26opencv寻找轮廓源代码,附有实现结果图片! -
寻找轮廓findContours
2017-07-21 11:33:34void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point()) 参数说明 ...contours参数为检测的轮廓数组,每一 -
如何利用OpenCV寻找轮廓的中心?
2022-01-28 19:06:34§01 寻找轮廓的中心 今天在图像处理中需要用到OpenCV的轮廓中心,在 OpenCV center of contour 中看到了给定的方法。将其总结如下,便于以后的应用。 形状检测和分析 今天我们开启一个新的三联示例程序,用于形状... -
OpenCV笔记10——寻找轮廓和凸包以及绘制轮廓的外接矩形和圆
2020-10-15 19:03:041.寻找轮廓 1.1 相关API 说明: 第一个参数:输入的图像是经过边缘提取处理后的二值化图像; conturs向量是用来存储轮廓点的,可以这样理解:一个轮廓的所有点用一个小容器vector,所有小容器再用一个大容器... -
OpenCV寻找轮廓实现运动目标检测
2012-05-03 10:21:25使用OpenCV寻找轮廓实现视频流的运动目标检测。刘瑞祯,于仕琪《OpenCV教程基础篇》的训练代码。 -
FindContours 寻找轮廓 参数
2015-06-24 14:13:49它包含第一个最外层轮廓的指针,如果指针为 NULL,则没有检测到轮廓(比如图像是全黑的)。其它轮廓可以从 first_contour 利用 h_next 和 v_next 链接访问到。 在 cvDrawContours 的样例显示如何使用轮廓来进行连... -
opencv使用findContours寻找物体轮廓
2020-12-26 19:57:28OpenCV中的findContours函数是用来检测物体的轮廓 函数原型: CV_EXPORTS_W void findContours( InputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset... -
寻找轮廓
2015-10-20 21:00:29轮廓到底是什么?一个轮廓一般对应一系列的点,也就是图像中的一条曲线.表示的方法可能根据不同情况而有所不同.有多重方法可以表示曲线.在openCV中一般用序列来存储轮廓信息.序列中的每一个元素是曲线中一个点的位置.... -
OpenCV在图像中寻找轮廓的实例(附完整代码)
2021-04-27 14:11:42OpenCV在图像中寻找轮廓的实例OpenCV在图像中寻找轮廓的实例 OpenCV在图像中寻找轮廓的实例 #include "opencv2/imgcodecs.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" #include <... -
OPENCV寻找图形轮廓
2021-06-29 19:52:03示例:使用findContours函数寻找轮廓 二、使用步骤 1.引入库 代码如下(示例): import cv2 import numpy as np 2.读入数据 代码如下(示例): img = cv2.imread("head.png") 其次我们对图片进行二值 -
OpenCV每日函数 结构分析和形状描述符(4) findContours函数寻找轮廓
2020-10-24 17:31:07f函数从二值图像中检索轮廓。 轮廓是形状分析和对象检测和识别的有用工具。 2、参数详解 image 源,8 位单通道图像。 非零像素被视为 1。 零像素保持为 0,因此图像被视为二进制。 您可以使用 ... -
OpenCV笔记: 查找轮廓
2019-03-19 01:52:20NULL 博文链接:https://westice.iteye.com/blog/721225 -
opencv 寻找轮廓线与轮廓线的交点, 轮廓与圆的交点
2020-10-11 21:18:12opencv 寻找轮廓线与圆的交点 在项目过程中 我遇到了一个问题就是要求一段不规则轮廓线与一个圆的交点,网上查了一些资料,如果轮廓线是规则的话还能算出轮廓线的方程可以方便的解出交点,但是现在轮廓线是不固定的... -
OpenCV学习28--在图像中寻找轮廓
2018-03-21 15:23:12查找轮廓 什么是轮廓:一个轮廓是由图像中的一系列点组成的,也就是图像中的一条曲线。在OpenCV中一般用序列来存储轮廓信息。序列中的每个元素是曲线中每个点的位置。 关于序列:序列是内存存储器中可以存储的一种... -
Opencv寻找轮廓的最小外接矩形,并获取矩形的中心点,旋转角度
2017-07-06 14:53:43//寻找最外层轮廓 vector<vector<Point>> contours; vector<Vec4i> hierarchy; findContours(mat,contours,hierarchy,RETR_EXTERNAL,CHAIN_APPROX_NONE,Point()); Mat imageContours=Mat::zeros(mat.size(),CV... -
opencv学习之寻找轮廓并绘制轮廓
2017-01-28 22:08:27//寻找轮廓 findContours(g_cannyMat_output, g_vContours, g_vHierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0)); //绘制轮廓 Mat drawing = Mat::zeros(g_cannyMat_output.size(), CV_8UC3); for ... -
轮廓获取_slide6rj_labview_轮廓获取
2021-09-10 15:30:54获取图象轮廓,个别图片可以,个别图片不行。