前提・実現したいこと
openCV(C++)を用いて、二枚の画像の画素値をそれぞれ比較し、小さいほうを取り出して一つの画像を作ろうとしています。
発生している問題・エラーメッセージ
現在、プログラミング自体は動いているのですが、横軸の画素値比較がうまく機能していない状態です。
利用している画像のpixelはともに(320×236)であることは確認済みです。
画像を出力すると以上のように途中でスキャンが止まってしまい困っています。
ソースコードのfor文内の
high
width
を
input1.rows
input1.cols
などに変換してみても、直りませんでした。
しかし、数値を直接入力すると(236より大きくすると)スキャンが進みます。
どのような原因で、このようなことが起きているのか一人では解明できなかったので、ご教授お願い致します。
該当のソースコード
C++
1#include <opencv2/opencv.hpp> 2#include <iostream> 3#include <algorithm> //min関数を使うために必要 4 5using namespace std; 6using namespace cv; 7 8int main() { 9 10 const int k = 2; //画像枚数 11 12 const int width = 320; //画像の幅 13 const int high = 236; //画像の高さ 14 15 16 17 //const int nop = width * high; //number of pixels 18 19 20 //一枚目の入力画像// 21 22 23 Mat input1 = imread("cat.jpg"); 24 if(!input1.data) { 25 cout << "cannot open input file" << endl; 26 return 1; 27 } 28 29 30 //二枚目の入力画像// 31 32 33 Mat input2 = imread("sample.jpg"); 34 if (!input2.data) { 35 cout << "cannot open input file" << endl; 36 return 1; 37 } 38 39 //int input[k][nop] = {}; //初期化 40 41 42 Mat output = input1.clone(); //格納する枠組み// 43 44 45 for (int y = 0; y < high; y++) { 46 for (int x = 0; x < width; x++) { 47 48 int pixel[k] = { {input1.at<unsigned char>(y, x)},{input2.at<unsigned char>(y, x)} }; 49 50 int min = *min_element(pixel ,pixel + k); 51 52 output.at<unsigned char>(y, x) = min; 53 } 54 } 55 56 57 imwrite("output.bmp", output); 58 59 return 0; 60 61}
試したこと
ソースコードのfor文内の
high
width
を
input1.rows
input1.cols
などに変換
補足情報(FW/ツールのバージョンなど)
openCV4.5.8
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/07 02:14
2021/10/07 05:19
2021/10/08 02:42