2017-03-18 12 views
-1

SSorry für mein schlechtes Englisch. Ich habe ein Bild, das 3 Kreise unterschiedlicher Farbe zeigt, eine rote, eine grüne und eine blaue und ich kann dieses Bild in den 3 Kanälen anzeigen, aber sie erscheinen weiß und in dem Code zeige ich einen Bildanruf "Kopie R" und ich an Ich weiß nicht, wie man diese Kopie R in ein anderes Bild mit einer beliebigen Farbe bringt. Ich möchte das Originalbild überlappen und die rote Farbe ändern. Wie kann ich das machen ???OpenCV konvertieren eine Farbe in eine andere

dies ist mein Code, sorry das erste Mal, dass ich eine Frage stellen und nicht wissen, wie

richtig veröffentlichen
#include <opencv2/core.hpp> 
#include <opencv2/imgproc.hpp> 
#include <opencv2/highgui.hpp> 

#define w 400 

using namespace cv; 

/// Funktion Header

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

ändern die Zahlen innerhalb der 'Scalar' Typen und Sie werden verschiedene Farben. –

+0

Wenn Sie den Wert des Skalars im In-Range-Betrieb ändern wollen, habe ich es bereits ausprobiert und es hat immer noch nicht funktioniert –

Antwort

0

Von den Blicken von ihm, Es sieht so aus, als wäre copy eine Binärmaske, und Sie möchten diese Maske dem Bild überlagern, so dass nur die Nicht-Null-Pixel in der Maske ihre ursprüngliche Farbe behalten.

Wenn meine Annahme richtig ist, dann die subtrahieren Methode verwenden, wie unten dargestellt, sollen Ihnen helfen:

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); 
Verwandte Themen