実現したいこと
二つの画像の差を求め二値化し、白黒になった画像の白の部分を赤色に変換したい。
前提
二値化までは出来たが、白から赤に変換できない
発生している問題・エラーメッセージ
if
1エラーメッセージ
該当のソースコード
C++
#include <iostream>
// OpenCV用のヘッダファイル
#include <opencv2/opencv.hpp>
//画像ファイル (サイズは小さめが良い)
#define FILE_NAME1 "issue_input1.jpg"
#define FILE_NAME2 "issue_input2.jpg"
#define THRESHOLD (10)
#define COLOR_NUM (256)
#define WINDOW_NAME_INPUT1 "input1"
#define WINDOW_NAME_INPUT2 "input2"
#define WINDOW_NAME_SUB "sub"
#define WINDOW_NAME_OUTPUT "output"
#define ALPHA (0.5)//透過度
int main(int argc, const char * argv[]) {
//グレースケールで表示
cv::Mat src_img1 = cv::imread(FILE_NAME1,0);
cv::Mat src_img2 = cv::imread(FILE_NAME2,0);
if (src_img1.empty() || src_img2.empty()) { //入力失敗の場合
fprintf(stderr, "File is not opened.\n");
return (-1);
}
//合成画像
cv::Mat sub_img = cv::Mat(src_img1.size(),CV_8UC1); cv::Mat result_img = cv::Mat(src_img1.size(),CV_8UC1); int x,y; //合成画像の出力 for (y=0; y<src_img1.rows; y++) { for (x=0; x<src_img1.cols; x++) { //画素値の取得 cv::Mat dst_img = cv::Mat(src_img1.size(), CV_8UC3); int s1 = (double)src_img1.at<unsigned char>(y,x); int s2 = (double)src_img2.at<unsigned char>(y,x); int s_result = abs(s1-s2); sub_img.at<unsigned char>(y,x)=(unsigned char)s_result; if (s_result>THRESHOLD) { s_result = 255; }else{ s_result = 0; } result_img.at<unsigned char>(y,x) = s_result; } } for (y=0; y<src_img1.rows; y++) { for (x=0; x<src_img1.cols; x++) { if ( s_result == 0) { cv::Vec3b s = src_img1.at<cv::Vec3b>(y,x); s[0] = s[0]; //B s[1] = s[0]; //G s[2] = s[0]; //R } else{ cv::Vec3b s = src_img1.at<cv::Vec3b>(y,x); s[0] = s[0]; //B s[1] = s[0]; //G s[2] = s[2]; //R} } } } cv::imshow(WINDOW_NAME_SUB, sub_img); cv::imshow(WINDOW_NAME_OUTPUT, result_img); cv::waitKey();
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。