2017-03-18 10 views
-1

私の悪い英語のために申し訳ありません。私は別の色、1つの赤、1つの緑と1つの青の3つのサークルを表示する画像を持っていますが、私は3つのチャンネルにこの画像を表示することができますが、それらは白く見え、コードでは "このコピーを別のイメージに作成する方法はわかりません。元のイメージと重なり、赤の色を変更する必要があります。これどうやってするの ???OpenCVで他の色に変換する

これは私のコードで、申し訳ありません私は、質問を作成し、適切にその様子から

#include <opencv2/core.hpp> 
#include <opencv2/imgproc.hpp> 
#include <opencv2/highgui.hpp> 

#define w 400 

using namespace cv; 

///関数ヘッダ

void MyFilledCircle(Mat img, Point center); 
void MyFilledCircle1(Mat img, Point center); 
void MyFilledCircle2(Mat img, Point center); 
int main(void) { 

//![create_images] 

char window[] = "Original"; 

/// Create black empty images 
Mat image = Mat::zeros(w, w, CV_8UC3); 


/// 1.b. Creating circles 
MyFilledCircle(image, Point(200, 200)); 
MyFilledCircle1(image, Point(150, 150)); 
MyFilledCircle2(image, Point(250, 250)); 


Mat channel[3]; 
split(image, channel); 

//channel[0] = Mat::zeros(image.rows, image.cols, CV_8UC1); 

merge(channel, 3, image); 

Mat imageHSV; 
Mat copy; 


imshow(window, image); 
//imshow("Color 1", imageHSV); 

inRange(image, Scalar(0, 0, 255), Scalar(0, 0, 255), copy); 
imshow("copy R", copy); 


imshow("B", channel[0]); 
imshow("G", channel[1]); 
imshow("R", channel[2]); 





//imshow("0", canal0); 

//imwrite("dest.jpg", image); 




waitKey(0); 
return(0); 
} 

/// Function Declaration 




//![myfilledcircle] 

void MyFilledCircle1(Mat img, Point center) 
{ 
circle(img, 
    center, 
    50, 
    Scalar(0, 255, 0), 
    FILLED, 
    LINE_8); 
} 

void MyFilledCircle(Mat img, Point center) 
{ 
circle(img, 
    center, 
    50, 
    Scalar(0, 0, 255), 
    FILLED, 
    LINE_8); 
} 


void MyFilledCircle2(Mat img, Point center) 
{ 
circle(img, 
    center, 
    50, 
    Scalar(255, 0, 0), 
    FILLED, 
    LINE_8); 
} 
+1

変更番号と、あなたは、異なる色を取得します。 –

+0

あなたがinrange操作でスカラーの値を変更することを意味するなら、私はすでにそれを試してもそれはまだ動作しませんでした –

答えて

0

を公開する方法を知らない最初の時間は、ありますcopyはバイナリマスクであり、このマスクをイメージにスーパーインポーズして、マスクのゼロでないピクセルだけが元の色を保持するようにしたいと考えます。

下図のように私の仮定はあなたを助ける必要があり、その後、サブトラクト法を使用して、正しいかどうか: `Scalar`種類の内部

Mat result; 
    cvtColor(copy,copy,CV_GRAY2BGR);//change copy to a 3 channel image 
    absdiff(image,image,result);//initialize mask as a black image of img.size() 
    subtract(copy,image,result); 
    subtract(copy,result,result); 
関連する問題