java
OpenCV can't detect color red correctly [duplicate]
I have the following image: I would like to detect the red rectangle using cv::inRange method and HSV color space. int H_MIN = 0; int H_MAX = 10; int S_MIN = 70; int S_MAX = 255; int V_MIN = 50; int V_MAX = 255; cv::cvtColor( input, imageHSV, cv::COLOR_BGR2HSV ); cv::inRange( imageHSV, cv::Scalar( H_MIN, S_MIN, V_MIN ), cv::Scalar( H_MAX, S_MAX, V_MAX ), imgThreshold0 ); I already created dynamic trackbars in order to change the values for HSV, but I can't get the desired result. Any suggestion for best values (and maybe filters) to use?
In HSV space, the red color wraps around 180. So you need the H values to be both in [0,10] and [170, 180]. Try this: #include <opencv2\opencv.hpp> using namespace cv; int main() { Mat3b bgr = imread("path_to_image"); Mat3b hsv; cvtColor(bgr, hsv, COLOR_BGR2HSV); Mat1b mask1, mask2; inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1); inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2); Mat1b mask = mask1 | mask2; imshow("Mask", mask); waitKey(); return 0; } Your previous result: Result adding range [170, 180]: Another interesting approach which needs to check a single range only is: invert the BGR image convert to HSV look for cyan color This idea has been proposed by fmw42 and kindly pointed out by Mark Setchell. Thank you very much for that. #include <opencv2\opencv.hpp> using namespace cv; int main() { Mat3b bgr = imread("path_to_image"); Mat3b bgr_inv = ~bgr; Mat3b hsv_inv; cvtColor(bgr_inv, hsv_inv, COLOR_BGR2HSV); Mat1b mask; inRange(hsv_inv, Scalar(90 - 10, 70, 50), Scalar(90 + 10, 255, 255), mask); // Cyan is 90 imshow("Mask", mask); waitKey(); return 0; }
Related Links
How to identify whether a web server supports Web Services or not?
How can I get the request URL from a Java Filter?
Caused by: java.sql.SQLException: Exhausted Resultset with Hibernate But NOT eclipselink
Javadoc: line breaks without HTML-tags?
Is EJB a ADO.NET equivalent in Java?
how could i make the JFrame content change to corresponding click?
What happens if multiple converters can unmarshal xml?
How do I read file x bytes at a time ? in java
Persistent instrumentation for Java
Error creating Uri object
Returning an inorder string of a Tree
In Maven, how do I customize lifecycle phases?
Windows XP blocking zip files created by my program
How to navigate in a circle
Why cannot I change a collection returned by getter?
Document Management System - Database Design