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

本文实例为大家分享了opencv提取轮廓大于某个阈值的图像,供大家参考,具体内容如下

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "stdio.h"
#include"core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>

using namespace cv;
using namespace std;
int main(int argc, char** argv)
{

const char* inputImage = "d:/3.jpg";
 Mat img;
 int threshval =100;
 img = imread(inputImage,0);
 if (img.empty())
 {
 cout << "Could not read input image file: " << inputImage << endl;
 return -1;
 } 

 img = img >110;
 namedWindow("Img", 1);
 imshow("Img", img);
 vector<vector<Point> > contours;
 vector<Vec4i>hierarchy; 

 vector<Point> contour;
 Mat dst = Mat::zeros(img.rows, img.cols, CV_8UC3);
 findContours(img, contours,hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); 

 int m=contours.size();//得到轮廓的数量
 int n=0;
 for (int i =0;i<m;++i)
 {
 n=contours[i].size();
 for (int j =0;j<n;++j)
 {
  contour.push_back(contours[i][j]);//读取每个轮廓的点
 }
 double area = contourArea(contour); //取得轮廓面积

 if (area>10)//只画出轮廓大于10的点
 {
 Scalar color( (rand()&255), (rand()&255), (rand()&255) ); 

  drawContours( dst, contours, i, color, 1, 8, hierarchy );
 }
 contour.clear();

 }

 namedWindow("src", 1);
 imshow( "src", dst ); 

  waitKey();
  return 0;
}

左边为二值化的图像

右边为提取面积大于10的轮廓的图像

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

(0)

相关推荐

  • Opencv提取连通区域轮廓的方法

    本文实例为大家分享了Opencv提取连通区域轮廓的具体代码,供大家参考,具体内容如下 在进行图像分割后,可能需要对感兴趣的目标区域进行提取,比较常用的方法是计算轮廓. 通过轮廓可以获得目标的一些信息: (1)目标位置 (2)目标大小(即面积) (3)目标形状(轮廓矩) 当然,轮廓不一定代表希望目标区域,阈值分割时可能造成一部分信息丢失,因此可以计算轮廓的质心坐标,再进行漫水填充. 程序中有寻找质心+填充,但效果不好,因此就不放填充后的图了. 实验结果: #include "opencv2/img

  • Opencv二帧差法检测运动目标与提取轮廓

    Opencv学习之二帧差法运动目标检测与轮廓提取 ,供大家参考,具体内容如下 代码是从网上摘抄学习的,加了好多注释,感觉就像边看书边做笔记一样,给人以满足的享受.Let's do this! #include "highgui.h" #include "cv.h" #include "stdio.h" #include <time.h> #include <math.h> #include <string.h>

  • Opencv实现轮廓提取功能

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

  • opencv提取外部轮廓并在外部加矩形框

    这段时间一直在用opencv搞图像处理的问题,发现虽然可调用的函数多,但是直接找相应代码还是很困难,就行寻找连通域,并在连通域外侧加框,对于习惯使用Mat矩形操作的我,真心感觉代码少之又少,为防止以后自己还会用到,特在此记录一下. 要对下面的图像进行字符的边缘检测. 程序中具体的步骤为: (1)灰度化.二值化 (2)图像膨胀 (3)检测膨胀图像的边缘并叫外矩形框 实现代码如下: #include "stdafx.h" #include "stdio.h" #incl

  • opencv3/C++轮廓的提取与筛选方式

    轮廓提取 findContours发现轮廓 findContours( InputOutputArray binImg, //输入8bit图像,0值像素值不变,非0的像素看成1:(变为二值图像) OutputArrayOfArrays contours,//输出找到的轮廓对象 OutputArray, hierachy// 图像的拓扑结构 int mode, //轮廓返回的模式(RETR_TREE等) int method,//发现方法(CHAIN_APPROX_SIMPLE等) Point o

  • 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

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

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

  • 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提取图像中的矩形区域(PPT屏幕等)

    前言 最近参加了大创项目,题目涉及到计算机视觉,学姐发了个修正图像的博客链接,于是打算用这个题目入门OpenCV. 分析问题 照片中的PPT区域总是沿着x,y,z三个轴都有倾斜(如下图),要想把照片翻转到平行位置,需要进行透视变换,而透视变换需要同一像素点变换前后的坐标.由此可以想到,提取矩形区域四个角的坐标作为变换前的坐标,变换后的坐标可以设为照片的四个角落,经过投影变换,矩形区域将会翻转并充满图像. 因此我们要解决的问题变为:提取矩形的四个角落.进行透视变换. 提取矩形角落坐标 矩形的检测主

  • openCV提取图像中的矩形区域

    改编自详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)原文是c++版,我改成了python版,供大家参考学习. 主要思想:边缘检测->轮廓检测->找出最大的面积的轮廓->找出顶点->投影变换 import numpy as np import cv2 # 这个成功的扣下了ppt白板 srcPic = cv2.imread('2345.jpg') length=srcPic.shape[0] depth=srcPic.shape[1] polyPic = srcPic shr

  • 如何使用Python OpenCV提取物体轮廓详解

    通常提取物体的轮廓时,图像都存在噪声,提取效果并不理想.如提取下图的轮廓时, 提取代码: import cv2 img = cv2.imread("mouse.png") cv2.imshow("origin",img) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret,binary = cv2.threshold(gray,128,255,cv2.THRESH_BINARY) cv2.imshow("bina

  • OpenCV提取图像中圆线上的数据具体流程

    目录 需求说明 具体流程 功能函数 C++测试代码 测试效果 总结 需求说明 在对图像进行处理时,经常会有这类需求:客户想要提取出图像中某条直线.圆线或者ROI区域内的感兴趣数据,进行重点关注.该需求在图像检测领域尤其常见.ROI区域一般搭配Rect即可完成提取,直线和圆线数据的提取没有现成的函数,需要自行实现. 直线的提取见: OpenCV获取图像中直线上的数据具体流程 而圆线的提取则是本文要将的内容,对圆线而言,将线上某点作为起点,沿顺时针或逆时针方向依次提取感兴趣数据,可放置在容器中.那么

  • opencv提取水平与垂直线条

    本文实例为大家分享了opencv提取水平与垂直线条的具体代码,供大家参考,具体内容如下 话不多说,先看结果: 我们可以看到,最总是提取出: 水平的线条. 上代码吧: // opencv0013.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; i

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

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

随机推荐