Canny アルゴリズムの概要: cv::Canny

ステップ:

Canny アルゴリズムの紹介 - CV::Canny の 5 つのステップ
1. ガウス ブラー - GaussianBlur
2. グレースケール変換 - cvtColor
3. 勾配の計算 - Sobel/Scharr
4. 非最大信号抑制
5. 高しきい値と低しきい値の出力バイナリ イメージ

Canny アルゴリズムの紹介 - 高しきい値と低しきい値の出力バイナリ画像
●T1、T2 はしきい値で、T2 より大きいものは保持され、T1 より小さいものは破棄されます。T2 より高いピクセルから始まり、T1 より大きいものはそれぞれに接続されます。他は保持されます。最後に、出力バイナリ イメージが取得されます。
●推奨される高閾値と低閾値の比率は、T2:T1 = 3:1/2:1 です。ここで、T2 は高閾値、T1 は低閾値です。

API: Cv::Canny
Canny (
InputArray src, // 8 ビット入力画像
OutputArray エッジ, // 出力エッジ画像、通常はバイナリ画像、背景は黒です
double Threshold1, // 低しきい値、多くの場合高 1/2 またはしきい値の 1/3
double Threshold2, // 高いしきい値
int aptertureSize, // Soble 演算子のサイズ、通常は 3x3、値 3
bool L2gradient // 正規化に L2 を示す場合は true を選択し、それ以外の場合は正規化に L1 を使用する unified
)

コード:

#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
using namespace cv;
Mat src, gray_src, dst;
	int t1_val = 50;
	int t1_max = 255;
	const char* outputtitle = "result image";
void Canny_Demo(int, void*);
int main(int argc, char** argv) {
	
	
	src = imread("C:/Users/ThinkPad/Desktop/1.PNG");
	if (!src.data) {
		printf("could not find");
		return -1;
	}
	namedWindow("demo", cv::WINDOW_AUTOSIZE);
	namedWindow(outputtitle, cv::WINDOW_AUTOSIZE);
	imshow("demo", src);
	cvtColor(src, gray_src, COLOR_BGR2GRAY);
	//转换为灰度图
	createTrackbar("Threshold Value", outputtitle, &t1_val, t1_max, Canny_Demo);
	Canny_Demo(0, 0);
	waitKey(0);
	return 0;
}
void Canny_Demo(int, void*) {
	Mat edge_output;
	blur(gray_src, gray_src, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);
	Canny(gray_src, edge_output, t1_val, t1_val*2, 3, false);

	//dst.create(src.size(), src.type());
	//将图像的边缘显示,是彩色的边缘。像素为1的时候,将原像素的值copy到上。
	//src.copyTo(dst, edge_output);
	imshow(outputtitle, edge_output);
}

 結果:

おすすめ

転載: blog.csdn.net/qq_44808827/article/details/121214287