二値化した白黒画像の色を変換したい

実現したいこと

二つの画像の差を求め二値化し、白黒になった画像の白の部分を赤色に変換したい。 

前提

二値化までは出来たが、白から赤に変換できない

発生している問題・エラーメッセージ

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();

}

コメントを投稿

0 コメント