簡體   English   中英

使用OpenCV僅檢測圖像中的RGB藍色

[英]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值。

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圖像中繪制的藍色方塊

Input.png

Output.png藍色方塊在這二值圖像中檢測

Output.png

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM