[英]Detect only RGB blue in image using OpenCV
我正在嘗試使用C ++和openCV在下面的圖像中檢測到3個藍色的圓圈。
我用這個代碼
int main(){
Mat original=imread("img.jpg");
Mat hsv;
cvtColor(original,hsv,CV_BGR2HSV);
Mat bw;
inRange(hsv,Scalar(110,50,50),Scalar(130,255,255),bw);//detects blue
}
該代碼確實檢測到3個藍色圓圈, 但也檢測到其他藍色點。 我認為這與我指定的范圍有關。 有沒有辦法只檢測那些RGB藍色圓圈,因為我認為圖像中沒有其他任何點是RGB藍色。 我怎樣才能只檢測到這種顏色(255,0,0)?
對於您上面提供的圖像,以下閾值可以正常工作。
Scalar hsv_l(110,150,150);
Scalar hsv_h(130,255,255);
cvtColor(original,hsv,CV_BGR2HSV);
inRange(hsv,hsv_l,hsv_h,bw)
你可以很容易地找到使用鼠標所描述的任何像素的HSV值這里 。
另外,HSV色輪(如下)可能有助於選擇任何顏色並獲取其HSV值。
如果要檢測由(255,0,0)表示的顏色,則這是在使用inRange
函數時應指定的值。 另外,如果您對RGB顏色感興趣,則無需將圖像轉換為hsv。
請注意,OpenCV文檔中的相關頁面顯示inRange
函數的上限和下限是包括在內的-您可以對兩者使用相同的值。
一些小的修改:
int main()
{
// Paint a blue square in image
cv::Mat img = cv::Mat::zeros(100,100,CV_8UC3);
cv::Scalar blue(255,0,0);
img(cv::Rect(20,20,50,50)) = blue;
cv::imshow("Original Image", img);
// Detect this blue square
cv::Mat img2;
cv::inRange(img, blue, blue, img2);
cv::imshow("Specific Colour", img2);
cv::imwrite("Input.png",img);
cv::imwrite("Output.png",img2);
cv::waitKey(0);
return 0;
}
Input.png圖像中繪制的藍色方塊
Output.png藍色方塊在這二值圖像中檢測
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.