OpenCV and C++: change the color of some object in the image
I'm new to OpenCV and I'm trying to do some simple operations with an image.
I have this image. First of all, when the left button is clicked I have to compute the mean RGB color over a 9x9 neighborhood of the clicked point, then segment the soccer shirts by applying a static threshold to the three channels R, G and B (ΔR < 50, ΔG < 50, ΔB < 50), finally apply the new color to the shirts (RGB = (92,37,201)). This is my code:
#include <iostream>
#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#define NEIGHBORHOOD_SIZE 9
#define THRESH_R 50
#define THRESH_G 50
#define THRESH_B 50
#define THRESH_H 10
using namespace std;
using namespace cv;
static void onMouse (int event, int x, int y, int f, void* userdata) {
if(event == EVENT_LBUTTONDOWN) {
cout << "Left button clicked - position (" << x << ", " << y << ")" << endl;
Mat image = (*(Mat*) userdata);
//mean on the neighborhood code to be insert
//color segmentation code to be insert
Mat image_out = image.clone();
namedWindow("final_result", CV_WINDOW_AUTOSIZE);
cv::imshow("final_result", image_out);
cv::waitKey(0);
}
}
int main() {
Mat image = imread("robocup.jpg");
namedWindow("Robocup", CV_WINDOW_AUTOSIZE);
if(!image.empty()) {
imshow("Robocup", image);
}
setMouseCallback("Robocup", onMouse, &image);
waitKey(0);
destroyWindow("Robocup");
return 0;
}
Anyone can help me? Thank you!
mean is mean then your result is mean(image(Rect(x-4,y-4,9,9)). Becarefful I don't check x-4>0 and y-4>0 and y+4<rows and="" x+4<cols<="" p="">
threshold is threshold Threshold values is 50 for all channels then fixe thresh to 50.
finally apply the new color to the shirts (RGB = (92,37,201)). ?? why do you mean? all shirts?
Thank you, I've done successfully the mean. Yes, I've to change the color of all the robot's shirts