opencv形态学处理

简介: opencv形态学处理

image.png

形态学处理

image.png

1. 灰度化与二值化


这个在opencv中实现起来十分简单


cvtColor(src,temp, COLOR_BGR2GRAY);
threshold(temp,temp, 0, 255, THRESH_OTSU);
复制代码


当然二值化效果是否理想,阈值选取是否恰当还是要根据imshow二值化后的图来调整的。


2. 形态学操作


关于形态学的一些基本操作,比如腐蚀膨胀开运算(先腐蚀后膨胀)闭运算(先膨胀后腐蚀) ……这些已经有很多博客介绍了,我这里就简单总结一些复合运算的特点。

  • 开运算可以去除图像周围边缘的瑕疵、噪音
  • 闭运算可以去除图像内部的缺失点、噪音


3. 利用形态学取样


如何我们需要得到水平向的元素,那我们选择的结构元素就是水平的,然后开运算滤掉竖直向;反之也是一样


如果遇到更复杂的情况,可以先选出不需要的,然后图像作差直接去掉这部分,然后再选取,这样效果就会好很多。


4. 代码部分


#include <iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
void work1() {
  Mat src = imread("D:/3/7_1.jpg");
  Mat temp,result;
  Mat element = getStructuringElement(MORPH_RECT, Size(15,15),Point(-1,-1));
  cvtColor(src,temp, COLOR_BGR2GRAY);
  threshold(temp,temp, 0, 255, THRESH_OTSU);
  morphologyEx(temp, result, MORPH_CLOSE, element, Point(-1, -1), 1);
  imshow("7_1.jpg", src);
  imshow("result7_1", result);
}
void work2() {
  Mat src = imread("D:/3/7_2.jpg");
  Mat temp, result;
  Mat element = getStructuringElement(MORPH_RECT, Size(15, 15), Point(-1, -1));
  cvtColor(src, temp, COLOR_BGR2GRAY);
  threshold(temp, temp, 0, 255, THRESH_OTSU);
  morphologyEx(temp, result, MORPH_OPEN, element, Point(-1, -1), 1);
  imshow("7_2.jpg", src);
  imshow("result7_2", result);
}
void work3() {
  Mat src = imread("D:/3/7_3.jpg");
  Mat temp, result;
  Mat element = getStructuringElement(MORPH_RECT, Size(15, 15), Point(-1, -1));
  cvtColor(src, temp, COLOR_BGR2GRAY);
  threshold(temp, temp, 0, 255, THRESH_OTSU);
  morphologyEx(temp, result, MORPH_CLOSE, element, Point(-1, -1), 1);
  imshow("7_3.jpg", src);
  imshow("result7_3", result);
}
void work4() {
  Mat src = imread("D:/3/7_4.jpg");
  Mat temp, result;
  Mat element = getStructuringElement(MORPH_RECT, Size(1,5), Point(-1, -1));
  cvtColor(src, temp, COLOR_BGR2GRAY);
  threshold(temp, temp, 0, 255, THRESH_OTSU);
  morphologyEx(temp, result, MORPH_OPEN, element, Point(-1, -1), 1);
  imshow("7_4.jpg", src);
  imshow("result7_4", result);
}
void work5() {
  Mat src = imread("D:/3/7_5.jpg");
  Mat temp,dst, result;
  Mat element0= getStructuringElement(MORPH_RECT, Size(1,20), Point(-1, -1));
  Mat element1 = getStructuringElement(MORPH_RECT, Size(20,1), Point(-1, -1));
  cvtColor(src, temp, COLOR_BGR2GRAY);
  //去除竖向线条
  morphologyEx(temp,dst, MORPH_OPEN, element0, Point(-1, -1), 1);
  temp = temp - dst;
  morphologyEx(temp, result, MORPH_OPEN, element1, Point(-1, -1), 1);
  imshow("7_5.jpg", src);
  imshow("result7_5", result);
}
int main() {
  work1();
  work2();
  work3();
  work4();
  work5();
  waitKey(0);
  return 0;
}
复制代码


image.png

image.png


目录
相关文章
|
计算机视觉
openCV形态学梯度
形态学梯度
37 2
|
7月前
|
计算机视觉 Python
OpenCV形态学运算中梯度运算、顶帽、黑帽运算讲解与实战应用(附Python源码)
OpenCV形态学运算中梯度运算、顶帽、黑帽运算讲解与实战应用(附Python源码)
205 0
|
7月前
|
算法 API 计算机视觉
OpenCV(图像处理)-基于Python-形态学处理-开运算、闭运算、顶帽、黑帽运算
1. 形态学 OpenCV形态学是一种基于OpenCV库的数字图像处理技术,主要用于处理图像的形状、结构和空间关系。它包括一系列图像处理工具和算法,包括膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽等。
141 0
|
5月前
|
存储 计算机视觉
OpenCv形态学(一)
OpenCv形态学(一)
|
6月前
|
算法 计算机视觉
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
41 0
|
7月前
|
编解码 计算机视觉 C++
【OpenCV】—形态学滤波(1):腐蚀与膨胀
【OpenCV】—形态学滤波(1):腐蚀与膨胀
|
7月前
|
API 计算机视觉
【OpenCV】形态学滤波(2):开运算、形态学梯度、顶帽、黑帽
【OpenCV】形态学滤波(2):开运算、形态学梯度、顶帽、黑帽
|
7月前
|
计算机视觉
OpenCV(三十一):形态学操作
OpenCV(三十一):形态学操作
117 0
|
7月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.7、实现OpenCV自带的七种形态学转换操作
OpenCV这么简单为啥不学——1.7、实现OpenCV自带的七种形态学转换操作
53 0
|
计算机视觉
OpenCV-形态学梯度(GRADIENT)
OpenCV-形态学梯度(GRADIENT)