Opencv处理图像之轮廓提取

本文实例为大家分享了Opencv处理图像之轮廓提取,使用cvfindContours对图像进行轮廓检测,供大家参考,具体内容如下

#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
int main()
{

 IplImage* img = cvLoadImage("E:\\test.bmp",0);
 IplImage* imgColor = cvCreateImage(cvGetSize(img),8,3);
 IplImage* contoursImage = cvCreateImage(cvSize(img->width,img->height),8,1);

 cvNamedWindow("hui");
 cvShowImage("hui",img);
 cvThreshold(img,img,100,255,CV_THRESH_BINARY); //二值化图像以100为阀值
 cvNamedWindow("2");
 cvShowImage("2",img);

 CvSeq* contours = 0,* contoursTemp =0;
 cvZero(contoursImage);

 cvCvtColor(img,imgColor,CV_GRAY2BGR); //颜色转化函数

 //img :需要提前的图片需要二值
 //storage:存放的空间
 //contours:指向轮廓提取的第一个轮廓
 //sizeof(CvContour):采用的是哪一种结构以及大小
 //CV_RETR_LIST:轮廓存储方式
 //CV_CHAIN_APPROX_NONE:采用坐标集表示轮廓
 CvMemStorage* storage = cvCreateMemStorage(0);
 int total = cvFindContours(img,storage,&contours,sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_NONE,cvPoint(0,0));
 printf("%d",total); //输出总的轮廓数
 contoursTemp = contours;

 while(contoursTemp!=0){
 for(int i = 0;i<contoursTemp->total;i++){
 CvPoint *pt = (CvPoint*)cvGetSeqElem(contoursTemp,i);
 cvSetReal2D(contoursImage,pt->y,pt->x,255.0);
 cvSet2D(imgColor,pt->y,pt->x,cvScalar(0,0,255.0));
 }
 contoursTemp = contoursTemp->h_next;
 }
 cvNamedWindow("img");
 cvShowImage("img",imgColor);
 cvNamedWindow("contoursImage");
 cvShowImage("contoursImage",contoursImage);
 cvWaitKey(0);
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • OpenCV实现图像轮廓检测以及外接矩形

    前两篇博文分别介绍了图像的边缘检测和轮廓检测,本文接着介绍图像的轮廓检测和轮廓外接矩形: 一.代码部分: // extract_contours.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<cv.h> #include<highgui.h> using namespace cv; using namespace std; int _tmain(int argc, _TCHAR* argv[]) { /

  • Opencv图像处理之轮廓外背景颜色改变

    本文实例为大家分享了Opencv轮廓外背景颜色改变的具体代码,供大家参考,具体内容如下 自行学习弄得简单代码,使用了图像中的轮廓发现以及提取,再绘制出来,改变轮廓外的像素 首先,头文件,写的比较多,没用的可以自己去除 #include <opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include"opencv2/imgproc/imgproc.hpp" #include <io

  • python-opencv在有噪音的情况下提取图像的轮廓实例

    对于一般的图像提取轮廓,介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体. 比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多: 所以本文增加了去掉噪声的部分. 首先加载原始图像,并显示图像 img = cv2.imread("temp.jpg") #载入图像 h, w = img.shape[:2] #获取图像的高和宽 cv2.imshow("Origin", img) 然后进行低通滤波处理,进行降噪 blured = cv2.blur(i

  • Python Opencv实现图像轮廓识别功能

    本文实例为大家分享了python opencv识别图像轮廓的具体代码,供大家参考,具体内容如下 要求:用矩形或者圆形框住图片中的云朵(不要求全部框出) 轮廓检测 Opencv-Python接口中使用cv2.findContours()函数来查找检测物体的轮廓. import cv2 img = cv2.imread('cloud.jpg') # 灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化 ret, binary = cv2.th

  • opencv python 图像轮廓/检测轮廓/绘制轮廓的方法

    图像的轮廓检测,如计算多边形外界.形状毕竟.计算感兴趣区域等. Contours : Getting Started 轮廓 简单地解释为连接所有连续点(沿着边界)的曲线,具有相同的颜色或强度. 轮廓是形状分析和物体检测和识别的有用工具 NOTE 为获得更好的准确性,请使用二值图,在找到轮廓之前,应用阈值法或canny边缘检测 从OpenCV 3.2开始,findContours()不再修改源图像,而是将修改后的图像作为三个返回参数中的第一个返回 在OpenCV中,查找轮廓是从黑色背景中查找白色对

  • Opencv处理图像之轮廓提取

    本文实例为大家分享了Opencv处理图像之轮廓提取,使用cvfindContours对图像进行轮廓检测,供大家参考,具体内容如下 #include<iostream> #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> int main() { IplImage* img = cvLoadImage("E:\\test.bmp",0); IplImage* img

  • OpenCV图像轮廓提取的实现

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

  • python 基于opencv 绘制图像轮廓

    图像轮廓概念 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形. 谈起轮廓不免想到边缘,它们确实很像.简单的说,轮廓是连续的,边缘并不全都连续(下图).其实边缘主要是作为图像的特征使用,比如可以用边缘特征可以区分脸和手:而轮廓主要用来分析物体的形态,比如物体的周长和面积等,可以说边缘包括轮廓. 寻找轮廓的操作一般用于二值图像,所以通常会使用阈值分割或Canny边缘检测先得到二值图. 注意:寻找轮廓是针对白色物体的,一定要保证物体是白色,而背景是黑色,不然很多人在寻找轮廓时会找到图片最外面的一

  • Python OpenCV 图像区域轮廓标记(框选各种小纸条)

    学在前面 上篇 OpenCV 博客原计划完成一个 识别银行卡号的项目,但是写的过程中发现,技术储备不足,我无法在下述图片中,提取出卡号区域,也就无法进行后续的识别了,再次意识到了自己技术还不达标,继续学习.完不成,就实现其它学习项目. 轮廓识别实战 先看一下最终实现的效果,针对一张图片(该图片前景色和背景色差异较大),进行轮廓标记. 图片基本处理 import cv2 as cv src = cv.imread("./demo.jpg") gray = cv.cvtColor(src,

  • Python OpenCV 基于图像边缘提取的轮廓发现函数

    基础知识铺垫 在图像中,轮廓可以简单的理解为连接具有相同颜色的所有连续点(边界)的曲线,轮廓可用于形状分析和对象检测.识别等领域. 轮廓发现的原理:先通过阈值分割提取目标物体,再通过边缘检测提取目标物体轮廓. 一个轮廓就是一系列的点(像素),这些点构成了一个有序的点集合. 使用 cv2.findContours 函数可以用来检测图像的边缘. 函数原型说明 contours, hierarchy = cv2.findContours(image, mode, method[, contours[,

  • python计算机视觉opencv图像金字塔轮廓及模板匹配

    目录 1.图像金字塔 ①高斯金字塔 ②拉普拉斯金字塔 2.图像轮廓 ①寻找轮廓 ②轮廓特征 ③轮廓绘制 3.模板匹配 ①模板匹配 ②匹配框线绘制 ③多对象匹配 4.直方图统计 ①直方图绘制 ②直方图统计 ③直方图的mask操作 ④直方图均衡化 5.傅里叶变换 1.图像金字塔 ①高斯金字塔 向下采样,数据会越来越少,减少的方式是:将偶数行和列删除 向上采样,数据会越来越多,将图像在每个方向上扩大为原来的两倍,新增的行和列用0来填充.使用先前同样的内核与放大后的图像卷积,获得近似值. 上采样之后,图

  • Python+OpenCV之图像轮廓详解

    目录 1. 图像轮廓 1.1 findContours介绍 1.2 绘制轮廓 1.3 轮廓特征 2. 轮廓近似 2.1 轮廓 2.2 边界矩形 2.3 外界多边形及面积 1. 图像轮廓 1.1 findContours介绍 cv2.findContours(img, mode, method) mode:轮廓检索模式 RETR_EXTERNAL :只检索最外面的轮廓: RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中: RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是

随机推荐