前提・実現したいこと
OpenCVで線形フィルタを作ろうとしたところ結果画像が黒塗りになりました.
該当のソースコード
c++
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { //画像の読み込み Mat src = imread("../img/lena.jpg",0); if(src.empty()) { cout << "img not found" << endl; return -1; } //線形フィルタ double filter[][3] = { {1/9,1/9,1/9}, {1/9,1/9,1/9}, {1/9,1/9,1/9} }; //入力画像と同じサイズの画像を0で初期化 Mat dst = Mat::zeros(src.rows, src.cols, CV_8U); for(int j = 1; j < src.rows - 1; j++) { for(int i = 1; i < src.cols - 1; i++) { int tmp = 0; //テンプレート初期化 for(int jj = -1; jj < 1; jj++) { for(int ii = -1; ii < 1; ii++) { tmp += src.at<uchar>(j + jj,i + ii) * filter[jj + 1][ii + 1]; } } if(tmp < 0) tmp = -tmp; //絶対値 if(tmp > 255) tmp = 255; //255は超えない dst.at<uchar>(j, i) = tmp; } } namedWindow("original",WINDOW_AUTOSIZE); namedWindow("filter",WINDOW_AUTOSIZE); imshow("original",src); imshow("filter",dst); waitKey(0); return 0; }
参考にしたサイト
まだ回答がついていません
会員登録して回答してみよう