スムージングフィルタを試しています。私はOpenCVフィルター機能を使用したくない(はい、私はそれが存在することを知っているが、教科的な使用のために私は私を作りたい)。コードを実行すると、出力Matが伸びることがわかります。私はOpenCVで新しく、何が起こったのか理解できません。私のコードでは、私は元の画像に境界線を追加するので、私は3x3のフィルタを適用することができますstackoverflowの問題なし。独自のスムージングフィルタが機能しない
#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
/*
Smoothing Median
*/
using namespace cv;
using namespace std;
int main()
{
const int sizeFilter = 3;
const int border = 2;
Mat averageFilter(sizeFilter, sizeFilter, CV_8U, 1);
Mat input = imread("lena.jpg");
Mat sizedInput;
sizedInput = input.clone();
int sizeX = input.rows;
int sizeY = input.cols;
namedWindow("sizedInput");
imshow("sizedInput", sizedInput);
// Aggiungo i bordi per filtrare
copyMakeBorder(input, sizedInput, border, border,
border, border, BORDER_REPLICATE);
Mat dst = Mat(sizeX, sizeY, CV_8U);
for (int x = 2; x < sizeX; x++) {
for (int y = 2; y < sizeY; y++) {
int sum = 0;
sum = (int)sizedInput.at<uchar>(x - 1, y - 1)
+ (int)sizedInput.at<uchar>(x - 1, y)
+ (int)sizedInput.at<uchar>(x , y - 1)
+ (int)sizedInput.at<uchar>(x, y)
+ (int)sizedInput.at<uchar>(x, y + 1)
+ (int)sizedInput.at<uchar>(x + 1, y - 1)
+ (int)sizedInput.at<uchar>(x + 1, y + 1);
sum = sum * (0.11);
dst.at<uchar>(x , y) = sum;
}
}
namedWindow("Blu");
imshow("Blu", dst);
waitKey();
return 0;
}
はい、あなたは正しいです。どうもありがとうございました!しかし、私はあなたに何かもっと尋ねることができますか?本当の問題は何ですか?つまり、IMREAD_GRAYSCALEプロパティなしでイメージをロードするとどうなりますか? – Vito
答えを確認 – Miki
印象深い!ありがとうございました – Vito