opencv提取水平与垂直线条

本文实例为大家分享了opencv提取水平与垂直线条的具体代码,供大家参考,具体内容如下

话不多说,先看结果:

我们可以看到,最总是提取出; 水平的线条。

上代码吧:

// opencv0013.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;

int main()
{
 Mat src, dst;
 src = imread("D:/images/1.png");
 if (src.empty())
 {
 cout << "your image is null,please check your path" << endl;
 return -1;
 }
 char INPUT_WIN[] = "input image";
 char OUTPUT_WIN[] = "result image";
 namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
 imshow(INPUT_WIN, src);

 //输出灰色图像
 Mat gray_src;
 cvtColor(src, gray_src, CV_BGR2GRAY);
 imshow("gray image", gray_src);

 //装换成二值图像
 Mat binImg;
 adaptiveThreshold(~gray_src, binImg, 255,
 ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY,15, -2);
 imshow("binary image", binImg);

 //水平结构元素
 Mat hline = getStructuringElement(MORPH_RECT, Size(src.cols / 16, 1),
 Point(-1, -1));
 //垂直结构元素
 Mat vline = getStructuringElement(MORPH_RECT,Size(1,src.rows/16),
 Point(-1, -1));
 // 矩形结构
 Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3),
 Point(-1, -1));

 //Mat temp;
 //erode(binImg, temp, kernel);
 //dilate(temp,dst,kernel);
 morphologyEx(binImg, dst, CV_MOP_OPEN, hline); //上面等价这个一句话
 bitwise_not(dst, dst);//值取反 255 - SrcPixel
 imshow("Final Result", dst);

 waitKey(0);
  return 0;
}

理论解析:

二值图像与灰度图像上的膨胀操作:

二值图像与灰度图像上的腐蚀操作

adaptiveThreshold 函数的参数:

adaptiveThreshold(
Mat src, // 输入的灰度图像
Mat dest, // 二值图像
double maxValue, // 二值图像最大值
int adaptiveMethod // 自适应方法,只能其中之一 –
      // ADAPTIVE_THRESH_MEAN_C , ADAPTIVE_THRESH_GAUSSIAN_C
int thresholdType,// 阈值类型
int blockSize, // 块大小
double C // 常量C 可以是正数,0,负数
)

bitwise_not(Mat bin, Mat dst)像素取反操作,255 – SrcPixel  这里就不说了

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

(0)

相关推荐

  • 详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)

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

  • 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

  • Python Opencv提取图片中某种颜色组成的图形的方法

    主要目标识别图中红色的裂缝,尝试了几种不同的方法,最后发现比较每一点的RGB差值可以很好的解决这个问题,也就是提取图片中的红色相关信息.处理结果如下: 实现的代码如下,注意opencv读入的图片通道顺序是bgr: import cv2 import matplotlib.pyplot as plt imagepath = r'tear/11.jpg' image = cv2.imread(imagepath) height,width,channel = image.shape for i in

  • opencv3.0识别并提取图形中的矩形的方法

    利用opencv来识别图片中的矩形. 其中遇到的问题主要是识别轮廓时矩形内部的形状导致轮廓不闭合. 1. 对输入灰度图片进行高斯滤波  2. 做灰度直方图,提取阈值,做二值化处理  3. 提取图片轮廓  4. 识别图片中的矩形  5. 提取图片中的矩形 1.对输入灰度图片进行高斯滤波 cv::Mat src = cv::imread("F:\\t13.bmp",CV_BGR2GRAY); cv::Mat hsv; GaussianBlur(src,hsv,cv::Size(5,5),0

  • opencv提取水平与垂直线条

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

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

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

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

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

  • 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提取图像中的矩形区域

    改编自详解利用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

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

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

  • 如何使用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提取外部轮廓并在外部加矩形框

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

随机推荐