【OpenCV】形态学处理
来源:互联网 发布:json和javascript 编辑:程序博客网 时间:2024/06/07 06:49
形态学
形态学处理包括:开运算、闭运算、形态学梯度、顶帽、黑帽、击中或击不中变换。通过函数 cv::morphologyEx实现。
开运算Opening
dst=open(src,element)=dilate(erode(src,element))
闭运算Closing
dst=close(src,element)=erode(dilate(src,element))
形态学梯度Morphological Gradient
dst=morphgrad(src,element)=dilate(src,element)−erode(src,element)
顶帽Top Hat
dst=tophat(src,element)=src−open(src,element)
黑帽Black Hat
dst=blackhat(src,element)=close(src,element)−src
击中或击不中变换Hit-or-Miss
代码示例
#include "opencv2/imgproc.hpp"#include "opencv2/imgcodecs.hpp"#include "opencv2/highgui.hpp"using namespace cv;Mat src, dst;int morph_elem = 0;int morph_size = 0;int morph_operator = 0;int max_operator = 4;int max_elem = 2;int max_kernel_size = 21;char* window_name = "Morphology";void Morphology_Operations(int, void*);int main(int argc, char** argv){ String imageName("../data/baboon.jpg"); src = imread(imageName, IMREAD_COLOR); if (src.empty()) { return -1; } namedWindow(window_name, WINDOW_AUTOSIZE); createTrackbar("Operator:\n 0:Opening 1:Closing \n 2:Gradient 3:Top Hat \n 4:Black Hat", window_name, &morph_operator, max_operator, Morphology_Operations); createTrackbar("Element:\n 0: Rect - 1: Cross - 2: Ellipse", window_name, &morph_elem, max_elem, Morphology_Operations); createTrackbar("Kernel size:\n 2n +1", window_name, &morph_size, max_kernel_size, Morphology_Operations); Morphology_Operations(0, 0); waitKey(0); return 0;}void Morphology_Operations(int, void*){ int operation = morph_operator + 2; // 见开头的表,MORPH_X : 2,3,4,5 and 6 Mat element = getStructuringElement(morph_elem, Size(2 * morph_size + 1, 2 * morph_size + 1), Point(morph_size, morph_size)); morphologyEx(src, dst, operation, element); // 形态学处理 imshow(window_name, dst);}
运行结果
击中或击不中
#include <opencv2/core.hpp>#include <opencv2/imgproc.hpp>#include <opencv2/highgui.hpp>using namespace cv;int main() { Mat input_image = (Mat_<uchar>(8, 8) << 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 255, 255, 0, 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 255, 255, 0, 0, 0, 0); Mat kernel = (Mat_<int>(3, 3) << 0, 1, 0, 1, -1, 1, 0, 1, 0); Mat output_image; morphologyEx(input_image, output_image, MORPH_HITMISS, kernel); // 形态学处理:hit or miss const int rate = 50; // 放大显示 kernel = (kernel + 1) * 127; kernel.convertTo(kernel, CV_8U); resize(input_image, input_image, Size(), rate, rate, INTER_NEAREST); // 原图像 imshow("Original", input_image); resize(kernel, kernel, Size(), rate, rate, INTER_NEAREST); // 掩模 imshow("kernel", kernel); resize(output_image, output_image, Size(), rate, rate, INTER_NEAREST); // 击中或击不中 imshow("Hit or Miss", output_image); waitKey(0); return 0;}
运行结果
阅读全文
0 0
- OPENCV之形态学处理
- opencv形态学处理
- openCV 形态学图像处理
- opencv-形态学处理
- openCV 形态学处理
- opencv图像形态学处理
- OpenCV-形态学处理-morphologyEx
- 初学opencv/形态学处理
- 【OpenCV】形态学处理
- opencv学习-imgprocess-形态学处理
- OpenCV-Python教程:形态学处理
- 腐蚀,膨胀,opencv的形态学处理
- OpenCV-Python教程(4、形态学处理)
- Opencv 图像处理——形态学方法
- OpenCV对形态学的运算处理
- OpenCV入门(八)--形态学图像处理
- 基于OpenCV的图像形态学处理
- 【OpenCV】图像处理(二)图像形态学
- vue常见报错原因收集
- Live555源码彻底解密(根据testRTSPClient讲解)
- Android JNI知识简介
- 550W
- 使用Spring Data MongoDB 做聚合操作出现的问题及解决方案
- 【OpenCV】形态学处理
- 大文件拆分程序
- 大数据--hive学习(1)--hive的简单认识
- TensorFlow object detection api------ssd_mobilenet使用
- Zookeeper简单介绍(1)
- gensim-lda
- JAVA中List、Map、Set的区别与选用
- tomcat配置301重定向
- rtsp客户端做的事情(testRTSPClient)