膨胀会使白色膨胀,黑色缩小
腐蚀会使白色缩小,黑色膨胀

这是基于原理的,在kernel扫的时候,膨胀是将锚点替换为区域内最大值,腐蚀是将锚点替换为区域内最小值
最大值255是白色,最小值0是黑色

  • 开操作:先腐蚀后膨胀
  • 闭操作:先膨胀后腐蚀

开操作先腐蚀,将黑色的杂点去除,后膨胀,黑色的大块恢复原状。
闭操作先膨胀,将白色的杂点去除,后膨胀,白色的大块恢复原状。

转换二值图像

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

定义结构元素

Mat getStructuringElement(
    int shape, 
    Size ksize, 
    Point anchor = Point(-1,-1)
 

(1)int类型的shape,元素形状,可以是cv::MorphShapes之一。

(2)Size类型的ksize,结构化元素的大小。

(3)Point类型的anchor,默认值(-1,-1),表示锚定位于中心。请注意,只有十字形元素的形状取决于锚定位置。在其他情况下,锚只是调节形态学操作结果的移动量。

第一个参数有这几种选项

-(1)MORPH_RECT:矩形结构区域。

-(2)MORPH_CROSS,十字形结构区域。

-(3)MORPH_ELLIPSE,椭圆结构区域,内接于矩形Rect(0,0,esize.width,0.esize.height)的填充椭圆。

#include<opencv2\opencv.hpp>
#include<iostream>
		using namespace std;
		using namespace cv;
		int main()
			Mat src;
			src = imread("C:/Users/86176/Pictures/pics/chars.png");
			if (!src.data)
				printf("fail to read the pic\n");
			namedWindow("src", CV_WINDOW_AUTOSIZE);
			imshow("src", src);
			/*转化为灰度图*/
			Mat gray;
			if (src.channels() == 3)
				cvtColor(src, gray, CV_BGR2GRAY);
				gray = src;
			imshow("gray pic ", gray);
			//转化为二值图像
			Mat binImg;
			adaptiveThreshold(~gray, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);//如果不取反就选用闭操作
			imshow("binImg", binImg);
			//定义结构元素
			Mat kernel = getStructuringElement(MORPH_RECT, Size(3,3), Point(-1,-1) );
			//开操作
			Mat dst;
			morphologyEx(binImg, dst, CV_MOP_OPEN, kernel);
			//优化后输出
			Mat dsty, dstx;
			//blur(ydst, dsty, Size(3,3), Point(-1,-1));
			imshow("dst", dst);
			waitKey(0);
			return 0;

如果开操作分别调用腐蚀膨胀的API,再对他们的kernel尺寸进行调试,效果会更好

OpenCV4.5.0带来的主要变化有,许可证的变更,完成GSoc 2020,改进与增加部分功能。OpenCV在3系列下使用的是BSD许可证,此后,OpenCV将转为Apache 2许可证。关于开源代码的开发许可证,大致可以分为两种。第一种是具有传染性的,一旦使用了相关的开源代码,你的整个项目都需要为之开源;第二种是不具有传染性的,你在使用相关开源代码的时候,只需要标注软件出处即可。具有... #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc... 最近工作需要用到图像文字识别,但由于图像比较大需要识别的文字比较多,所以全图识别的话效果不好,所以需要对文字区域进行检测提取,再进行识别。 功能需要用.net实现,自己对图像识别方面并不熟悉,于是上网资料发现Python方面的资料比较多,但C#方面的资料真是少之又少。到的参考文章https://blog.csdn.net/huobanjishijian/article/details/63... 彩色模型数图像处理常用的采用模型是RGB(红,绿,蓝)模型和HSV(色调,饱和度,亮度),RGB广泛应用于彩色监视器和彩色视频摄像机,我们平时的图片一般都是RGB模型。而HSV模型更符合人描述和解释颜色的方式,HSV的彩色描述对人来说是自然且非常直观的。HSV模型HSV模型颜色的参数分别是:色调(H:hue),饱和度(S:saturation),亮度(V:value)。由A. R. Smith img = cv.imread("5.jpg") img2 = cv.cvtColor(img, cv.COLOR_BGR2HSV) # 转换BGR色彩空间到HSV色彩空间 lower_hsv = np.array([100, 43, 46]) upper_hsv = np.array([124, 255, 255]) mask = cv.inR.. 本人c#-opencvsharp对图像进行数抠取及数特征识别,并添加至原图,同时通过参考python的轮廓排序,自定了一个简易版轮廓排序函数,欢迎大家问题反馈哦   对于车牌识别,或OCR文字识别时,需要先对图片进行预处理,去除干扰因素后再进行后续图像识别操作!   图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用两个最基本的形态学操作 – 膨胀与腐蚀,使用不同的结构元素实现对输入图像的操作、得到想要的结果。  - 腐蚀,输出的像素值是结构元素覆... 关于如何在C#使用PaddleOCR可参考下面文章: OpenCvSharp (C# OpenCV) C# 调用PaddleOCR做文字识别详细步骤与代码演示_Color Space的博客-CSDN博客 搭配WinForm使用还会遇到一些问题,比如: 1、识别文字信息如何绘制到图像上? 2、OpenCvSharp如何显示图像到pictureBox? 实现效果: C# OpenCvSh img = cv2.imread('./res/aero3.jpg') # 照片 /添加的文字 /左下角坐标 /体 /体大小 /颜色 /体粗细 cv2.putText(... 本教程的主要目的是教读者利用OpenCV和EAST文本检测器来检测文本。 运行环境: EAST文本检测器需要OpenCV3.4.2或更高版本,有需要的读者可以先安装OpenCV。 主要内容: ●教程第一部分分析为何在自然场景下进行文本检测的挑战性是如此之高。●接下来简要探讨EAS...