opencv-基本的なしきい値操作

画像のしきい値(しきい値)

しきい値は制限を意味し、しきい値は制限値です。
といった

  • 直径が7cmを超えるリンゴの山は適格と見なされ、7cm未満は不適格と見なされます。
  • テストスコア、60を超えるスコアは合格と見なされ、60未満のスコアは不合格と見なされます

上記の分類により、すべての変数を2つのカテゴリに分類し、分類基準、つまり制限がしきい値になります。

しきい値は何ですか

  • (1)しきい値バイナリ。

  • (2)しきい値バイナリ反転

  • (3)切り捨て(切り捨て)

  • (4)ゼロへのしきい値

  • (5)ゼロへのしきい値が反転

しきい値の2値化

しきい値の2値化は、すべてのケースをしきい値によって2つのケースに分割することです。

  • 1.しきい値より大きい場合は、最大値を取ります。

  • 2.しきい値が0以下です。

ここに画像の説明を挿入します

ここに画像の説明を挿入します
左の画像で2値化演算を実行すると、青い線より上のすべての線が最大値になり、青い線より下の線がすべて0になります。これが右の画像です。

しきい値の非二値化

しきい値の非二値化も、すべてのケースをしきい値によって2つのケースに分割しますが、二値化の反対です。

  • 1.しきい値より大きい場合は、0を取ります。

  • 2.しきい値以下の最大値を取ります。

ここに画像の説明を挿入します

ここに画像の説明を挿入します
左の写真では、非二値化操作を実行すると、青い線の下のすべての線が最大値になり、青い線の上の線はすべて0になります。つまり、右の写真のようになります。

切り捨てられました

切り詰めは文字通りの意味から比較的簡単に理解できます。花や植物を作っている庭師のことを考えることができます。美しさのために、すべての木は同じ高さに切り取られます。つまり、しきい値よりも大きい木は切り詰められます。除去される:

  • 1.しきい値よりも大きい場合は、しきい値を取得します。

  • 2.しきい値以下の元の値を取得します。

式で表すと次の式になります。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
左の写真で切り捨て演算を行うと右の写真のようになります。

しきい値はゼロです

しきい値ゼロは制限を設定することと同じです。誰もが競争を考慮します。競争が進んだ場合、結果は有効であり、競争は継続します。結果が基準に達していない場合、それは損失と見なされ、結果はゼロになります。つまり、しきい値を下回る値はゼロになります。

  • 1.しきい値よりも大きい場合は、元の値を使用します。

  • 2.しきい値が0以下です。

ここに画像の説明を挿入します
ここに画像の説明を挿入します
左の画像では、しきい値がゼロになった後に右の画像を取得します

しきい値がゼロに逆になります

しきい値はゼロに反転され、しきい値はゼロになります。つまり、しきい値より大きい値はゼロになります。

  • 1.しきい値より大きい場合は、0を取ります。

  • 2.しきい値以下の元の値を取得します。

式で表すと、次の式になります。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
左の図では、右の図のように、しきい値がゼロに反転され、上のしきい値が0に設定されています。

総括する

ここに画像の説明を挿入します
しきい値を見つける方法、opencvは2つの方法を提供します

  • THERSH_OTSU 和 THERSH_OTSU

API

double threshold( 
    InputArray src, 
    OutputArray dst,                         
    double thresh, 
    double maxval,
    int type
);
  • (1)InputArrayタイプ、入力画像、マルチチャネル、8ビットまたは32ビット浮動小数点のsrc。

  • (2)OutputArrayタイプのdst、出力画像、画像のサイズ、タイプ、およびチャネル数は、入力画像と同じです。

  • (3)ダブルタイプのスレッシュ、スレッショルド。

  • (4)ダブルタイプmaxval、THRESH_BINARYおよびTHRESH_BINARY_INVしきい値タイプを使用する場合の最大値。

  • (5)intタイプのタイプ、しきい値タイプ、値については、cv :: ThresholdTypesを参照してください。

コード表示

スライダー組み合わせてコードを書く

トラックバーを調整してしきい値を制御し、しきい値タイプの切り替えを実現します

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

//全局变量
Mat src, dst;
int thresholdValue = 127;
int thresholdMax = 255;
int typeValue = 2;
int typeMax = 4;
const char* output_title = "binary img";//窗口名称“二值化图像”

void Threshold_Demo(int, void*);//二值化演示函数

								//主函数入口
int main()
{
    
    
	src = imread("C:/Users/86176/Pictures/pics/lena(1).tiff");
	if (!src.data)
	{
    
    
		cout << "could not load image..." << endl;
		return -1;
	}
	imshow("show image", src);
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);
	createTrackbar("Threshold Value", output_title, &thresholdValue, thresholdMax, Threshold_Demo);//动态调整
	createTrackbar("Type Value", output_title, &typeValue, typeMax, Threshold_Demo);

	Threshold_Demo(0, 0);
	imshow(output_title, dst);
	waitKey(0);
	return 0;
}
void Threshold_Demo(int, void*)
{
    
    
	threshold(src, dst, thresholdValue, thresholdMax, typeValue);

	imshow(output_title, dst);

}

効果

Opencvの基本的なしきい値操作

総括する

thresholdType = 0
しきい値の2値化

  • しきい値は0に設定され、すべての偶数ピクセルは0より大きく、最大値は255で、これは白です。
  • しきい値は255に設定され、すべてのピクセルは255未満、すべては0、つまり黒です。

thresholdType = 1
しきい値の非バイナリ化

  • しきい値は0に設定され、すべての偶数ピクセルは0より大きく、最小値は0で、これは黒です。
  • しきい値は255に設定され、すべてのピクセルは255未満であり、最大値は255で、これは白です。

thresholdType = 2
切り捨て

  • しきい値は0に設定され、すべての偶数ピクセルは0より大きく、しきい値は0で、黒です。
  • しきい値は255に設定され、すべてのピクセルは255以下であり、すべて元の値を取り、画像は変更されません。

thresholdType = 3
しきい値は0です

  • しきい値は0に設定され、すべての偶数ピクセルは0より大きく、すべて元の値を取り、画像は変更されません。
  • しきい値は255に設定され、すべてのピクセルは255以下、すべて0、画像は黒です。

thresholdType = 4
しきい値が0に逆になります

  • しきい値は0に設定され、すべての偶数ピクセルは0より大きく、すべて0に設定され、画像は黒になります。
  • しきい値は255に設定され、すべてのピクセルは255以下であり、すべて元の値を取り、画像は変更されません。

基本的なしきい値操作は、画像の脱水に使用できます

おすすめ

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