c语言通过opencv实现轮廓处理与切割

注意在寻找轮廓时要选择中寻找外层轮廓

RETR_EXTERNAL 
#include "opencv/cv.h"
#include "opencv/highgui.h"
using namespace std;
using namespace cv; 

int main()
{ 

Mat srcimg=imread("./22.jpg");
Mat dst;
cvtColor(srcimg,dst,CV_BGR2GRAY);
threshold(dst,dst,120,255,1);
vector<vector<Point> > edgepoint;
vector<Vec4i> lclass; 

findContours(dst,edgepoint,lclass,RETR_EXTERNAL,CHAIN_APPROX_NONE,Point());
Mat mat[edgepoint.size()]; 

for(int i=0;i<edgepoint.size();i++)
{ 

 Rect rec=boundingRect(Mat(edgepoint[i]));
 mat[i]=dst(rec);
rectangle(dst,rec,Scalar(100,80,90),1,1,0);
 drawContours(dst,edgepoint,i,Scalar(200),1,8,lclass);
 string str=to_string(i);
 imshow(str,mat[i]); 

}
imshow("tt",dst);
cout<<edgepoint.size()<<endl;
waitKey(0); 

} 

结果如下:

总结

以上就是本文关于c语言通过opencv实现轮廓处理与切割的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • C语言实现opencv提取直线、轮廓及ROI实例详解

    一.Canny检测轮廓 在上一篇文章中有提到sobel边缘检测,并重写了soble的C++代码让其与matlab中算法效果一致,而soble边缘检测是基于单一阈值的,我们不能兼顾到低阈值的丰富边缘和高阈值时的边缘缺失这两个问题.而canny算子则很好的弥补了这一不足,从目前看来,canny边缘检测在做图像轮廓提取方面是最优秀的边缘检测算法. canny边缘检测采用双阈值值法,高阈值用来检测图像中重要的.显著的线条.轮廓等,而低阈值用来保证不丢失细节部分,低阈值检测出来的边缘更丰富,但是很多边缘并

  • c语言通过opencv实现轮廓处理与切割

    注意在寻找轮廓时要选择中寻找外层轮廓 RETR_EXTERNAL #include "opencv/cv.h" #include "opencv/highgui.h" using namespace std; using namespace cv; int main() { Mat srcimg=imread("./22.jpg"); Mat dst; cvtColor(srcimg,dst,CV_BGR2GRAY); threshold(dst

  • Opencv实现轮廓提取功能

    轮廓:一个轮廓代表一系列的点(像素),这一系列的点构成一个有序的点集,所以可以把一个轮廓理解为一个有序的点集. 在opencv中,提供了一个函数返回一个有序的点集或者有序的点集的集合(指多个有序的点集),函数findContour是从二值图像中来计算轮廓的,一般使用Canny()函数处理后的图像,因为这样的图像含有边缘像素. 寻找轮廓的API函数: findContours(image,vector<vector<Point>> contours,vector<Vec4i&g

  • opencv提取轮廓大于某个阈值的图像

    本文实例为大家分享了opencv提取轮廓大于某个阈值的图像,供大家参考,具体内容如下 #include "stdafx.h" #include "cv.h" #include "highgui.h" #include "stdio.h" #include"core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include &quo

  • opencv 图像轮廓的实现示例

    图像轮廓 Contours:轮廓 轮廓是将没有连着一起的边缘连着一起. 边缘检测检测出边缘,边缘有些未连接在一起. 注意问题 1.对象为二值图像,首先进行阈值分割或者边缘检测. 2.查找轮廓需要更改原始图像,通常使用原始图像的一份进行拷贝. 3.在opencv里,是从黑色背景里找白色.因此对象必须是白色,背景为黑色. 方法 cv2.findContours() cv2.drawContours() 通过cv2.findContours() 查找轮廓在哪里,再通过 cv2.drawContours

  • opencv实现轮廓高斯滤波平滑

    本文实例为大家分享了opencv实现轮廓高斯滤波平滑的具体代码,供大家参考,具体内容如下 一个小测试的题目: 在图像上点选,找到与点选处相邻的颜色相近的点集合,对该点集合提取轮廓,对该点集合轮廓平滑处理,显示处理结果. #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; //************************************ //

  • OpenCV实现轮廓外接多边形

    本文实例为大家分享了OpenCV实现轮廓外接多边形的具体代码,供大家参考,具体内容如下 取轮廓最大外接矩形 Rect boundingRect( InputArray array ); array:输入的灰度图像或者2D点集,数据类型为vector或者Mat. 该函数可以求取包含输入图像中物体轮廓或者2D点集的最大外接矩形,函数只有一个参数,可以是灰度图像或者2D点集,灰度图像的参数类型为Mat,2D点集的参数类型为vector或者Mat.该函数的返回值是一个Rect类型的变量,该变量可以直接用

  • OpenCV计算轮廓长度/周长和面积

    本文实例为大家分享了OpenCV计算轮廓长度/周长和面积的具体代码,供大家参考,具体内容如下 轮廓面积 轮廓面积是指每个轮廓中所有的像素点围成区域的面积,单位为像素. double contourArea( InputArray contour, bool oriented = false ); contour:轮廓的像素点 oriented:区域面积是否具有方向的标志,true表示面积具有方向性,false表示不具有方向性,默认值为不具有方向性的false. 函数的返回值是统计轮廓面积的结果,

  • python计算机视觉opencv矩形轮廓顶点位置确定

    目录 一.问题的引入 二.问题的解决方法 方法一: 方法二 三.一些实现代码 一.问题的引入 opencv在图像处理方面有着非常强大的功能,当我们需要使用opencv进行一些图像的矫正工作时,我们通常需要找到原图的一些关键点,然后计算变换后的图像坐标,最后通过仿射变换或者透视变换获得自己想要的矫正图像,比如将一张拍歪了的纸进行矫正,我们的首要任务就是找到原图的一些关键点,通常的做法就是找纸张的4个顶点. 二.问题的解决方法 第一步我们肯定要找到纸张相应的矩形轮廓,这里可以二值化再找,也可以使用一

  • OpenCV图像轮廓提取的实现

    目录 前言 提取傅里叶变换的高频信息 通过蚁群算法进行图片轮廓提取 Canny边缘检测   使用cuda加速提取轮廓 前言 常用的轮廓提取算法有:Canny.阈值分割.提取傅里叶变换的高频信息,还有别具一格的蚁群算法,当然比较常见的作法是使用阈值分割+边缘查找,在OpenCV里是threshold和findContours两个函数的组合使用,和Canny. 轮廓提取的算法很多,而其目的都是为了找到图像中灰阶差比较大的位置.而所谓亚像素提取,则是使用了插值算法,以找出灰阶差最大的位置. 提取傅里叶

随机推荐