【C++OpenCV】閾値二値化、閾値逆二値化、カットオフ、閾値ゼロ取り、閾値ゼロ取り

1824 ワード

1.画像閾値タイプ(threshold)
簡単に言えば、閾値は画像分割のルーラーであり、このルーラーはアルゴリズムによって閾値タイプである閾値二値化(THERSH_BINARY)がある値を閾値とし、大きい値を最大値とし、小さい値を0閾値タイプとする閾値逆二値化(THRESH_BINARY_INV)がある値を閾値とし、打つ値より0とする.閾値より小さい値を最大値閾値タイプとする、カットオフ(THRESH_TRUNC)ある値を閾値とし、閾値より大きい値を閾値サイズとし、閾値より小さい値を不変閾値タイプとする、閾値ゼロ(THRESH_TOZERO)ある値を閾値とし、閾値より大きい値を不変とする、閾値より小さい値はいずれも0閾値タイプに設定――閾値逆取ゼロ(THRESH_TOZERO_INV)ある値を閾値とし、閾値より大きい値を0とし、閾値より小さい値は変わらない
Opencvは、閾値THRESH_を自動的に検索する2つの方法を提供する.OTSU THRESH_TRIANGLE
2.しきい値API
threshold(  
    cv::InputArray src, //       
    cv::OutputArray dst, //       
    double thresh, //     
    double maxValue, //        
    int thresholdType //            
);

コードデモ
#include
#include
#include

using namespace cv;
using namespace std;

Mat src, dst,gray;
int threshold_value = 127;   //  
int threshold_max = 255;   //   
int type_value = 2;
int type_max = 4;

const char* output_title = "binary image";

void Threshold_Demo(int,void*) {
	//        8   
	cvtColor(src, gray, COLOR_BGR2GRAY);
	//threshold(gray, dst, threshold_value, threshold_max, THRESH_BINARY); //     
	threshold(gray,dst,threshold_value, threshold_max, type_value); //       
	imshow(output_title,dst);
}

int main(int argc, char** argv) {
	src = imread("D:/image/img1.jpg");
	if (src.empty()) { 
		printf("could not load image...
"); return -1; } namedWindow("src" , WINDOW_AUTOSIZE); namedWindow(output_title,WINDOW_AUTOSIZE); imshow("src", src); createTrackbar("Threshold Value",output_title,&threshold_value,threshold_max,Threshold_Demo); createTrackbar("Type Value", output_title, &type_value, type_max, Threshold_Demo); Threshold_Demo(0,0); waitKey(0); return 0; }