前提・実現したいこと
OpenCVで線形フィルタを作ろうとしたところ結果画像が黒塗りになりました.
該当のソースコード
c++
1#include <iostream> 2#include <opencv2/opencv.hpp> 3 4 5using namespace std; 6using namespace cv; 7 8int main() 9{ 10 //画像の読み込み 11 Mat src = imread("../img/lena.jpg",0); 12 if(src.empty()) 13 { 14 cout << "img not found" << endl; 15 return -1; 16 } 17 18 //線形フィルタ 19 double filter[][3] = 20 { 21 {1/9,1/9,1/9}, 22 {1/9,1/9,1/9}, 23 {1/9,1/9,1/9} 24 }; 25 26 //入力画像と同じサイズの画像を0で初期化 27 Mat dst = Mat::zeros(src.rows, src.cols, CV_8U); 28 29 for(int j = 1; j < src.rows - 1; j++) 30 { 31 for(int i = 1; i < src.cols - 1; i++) 32 { 33 int tmp = 0; //テンプレート初期化 34 for(int jj = -1; jj < 1; jj++) 35 { 36 for(int ii = -1; ii < 1; ii++) 37 { 38 tmp += src.at<uchar>(j + jj,i + ii) * filter[jj + 1][ii + 1]; 39 } 40 } 41 if(tmp < 0) tmp = -tmp; //絶対値 42 if(tmp > 255) tmp = 255; //255は超えない 43 dst.at<uchar>(j, i) = tmp; 44 } 45 } 46 47 namedWindow("original",WINDOW_AUTOSIZE); 48 namedWindow("filter",WINDOW_AUTOSIZE); 49 imshow("original",src); 50 imshow("filter",dst); 51 waitKey(0); 52 53 return 0; 54 55}
参考にしたサイト
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/21 05:02
2020/07/21 07:04
2020/07/21 07:40