Opencv3 C ++ VS2017の調査では、畳み込み中の13のエッジ処理について説明しています。

  • 注12で問題を見つけるのは簡単です:畳み込み操作中にピクセルの周辺円を処理することはできません。
    • 画像を畳み込む場合、境界ピクセルを畳み込むことはできません。これは、境界ピクセルがカーネルと完全に重なっていないためです。したがって、3x3フィルターを使用すると、1ピクセルのエッジは処理されず、2のエッジは処理されません。 5x5フィルターを使用した場合、ピクセルは処理されません。処理されます。
  • エッジの処理
    • 畳み込み演算の前に、エッジピクセルを追加し、ピクセル値を入力します
      • BORDER_CONSTANT-指定されたピクセル値でエッジを塗りつぶします
      • BORDER_REPLICATE-エッジピクセルを既知のエッジピクセル値で埋めます。
      • BORDER_WRAP –反対側のピクセルを使用してパディングを補正します
    • API
      • copyMakeBorder(src、dst、top、bottom、left、right、borderType、value);
      • パラメータ:元の画像、出力画像、エッジの長さ、通常、top \ bottom \ left \ rightは同じ値、エッジタイプ(つまり、上記の3つ)、色の値を取ります
  • 実際、ぼかし中にGaussianBlurと一部の関数にborderTypeパラメーターがあることがわかります。
    • GaussianBlur(src、dst、Size(3、3)、0、0、BORDER_CONSTANT);
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <string>

using namespace std;
using namespace cv;
int main(int argc, char ** argv)
{
	Mat src, gray, bin, dst;
	src = imread("C:\\Users\\xujin\\Desktop\\test1.JPG");
	if (!src.data)
	{
		cout << "no image";
		return -1;
	}
	namedWindow("src_image", WINDOW_AUTOSIZE);
	namedWindow("dst_image", WINDOW_AUTOSIZE);
	imshow("src_image", src);


	int top = (int)(0.05*src.rows);
	int bottom = (int)(0.05*src.rows);
	int left = (int)(0.05*src.cols);
	int right = (int)(0.05*src.cols);
	RNG rng = (12345);
	int borderType = BORDER_CONSTANT;
	Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
	copyMakeBorder(src, dst, top, bottom, left, right, borderType, color);
	
	GaussianBlur(src, dst, Size(3, 3), 0, 0, BORDER_CONSTANT);
    imshow("dst_image", dst);

	waitKey(0);
	return 0;
}

 

おすすめ

転載: blog.csdn.net/Mrsherlock_/article/details/104551674