opencv-形態論アプリケーション-識別コードのテキストを抽出します

原理

  • 膨張、出力ピクセル値は、構造要素によってカバーされる入力画像の最大ピクセル値です。
  • 腐食、出力ピクセル値は、構造要素によってカバーされる入力画像の最小ピクセル値です。

膨張すると白が膨らみ、黒が縮みます。
腐食すると白が縮み、黒が膨らみます。

これは原理に基づいています。カーネルをスキャンすると、拡張はアンカーポイントを領域の最大値に置き換え、腐食はアンカーポイントを領域の最小
値に置き換えます。255は白で、最小値の0は黒です。

  • 開操作:最初に腐食、次に膨張
  • 閉鎖操作:最初に膨張し、次に腐食

開封操作は、最初に腐食し、黒い点を取り除き、次に拡大し、黒い塊は元の状態に戻ります。
クローズ操作は、最初に拡張してホワイトノイズを除去し、次に拡張してホワイトマスを復元します。

API

バイナリ画像を変換する

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型の形状、要素の形状は、cv :: MorphShapesのいずれかになります。

(2)Sizeタイプのksize、構造化要素のサイズ。

(3)ポイントタイプのアンカー(デフォルト値(-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);
			}
			else
			{
    
    
				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を呼び出し、カーネルサイズをデバッグすると、効果が向上します。

おすすめ

転載: blog.csdn.net/qq_28258885/article/details/112762564