2012-01-26 92 views
4

我想用OpenCV和C++檢測視頻或圖像中的紅色對象。有什麼算法可以做到這一點?使用OpenCV和C++檢測RGB顏色間隔

我想做一個顏色水平之間的關係比較。事實上,當亮度變化時,比例保持不變。所以我想確定感興趣區域的顏色的可接受值的間隔。對於我看紅色R(x,y)和G(x,y)/ R(x,y)和B(x,y)/ R(x,y)的情況。

我會再找個可接受值的範圍:得到一個最初的想法, 它釋放了從調色板圖像 紅色

每個報告的最大和最小,我想找到這樣的事情:

如果MINR < = R(X,Y)< = MAXR明< = G(X,Y)< = maxG MINB < = B(X,Y)< = MAXB所以 傳送彩色與存儲(X ,y)= blanc else couleur(x,y)= NOIR

+0

請在你的問題中添加像圖像等更多的細節。這很難理解。 –

+0

請讓我可以和某人在skyp上說更多詳情? – SOS

+4

如果你想聘請某人,請在twitter上找到我。 :) – karlphillip

回答

0

在這種情況下,請嘗試找出您所需的正方形的任何獨特功能,以區別於其他正方形。

對於例如

1)正方形的顏色: - 如果顏色是從所有其他方塊不同,可以檢查每個正方形內,並選擇具有所需的顏色方,如由mevatron.

2所說明)正方形的大小: - 如果您知道正方形的大小,那麼比較每個正方形的大小並選擇最佳。

+0

非常感謝,但我需要檢測到一個正方形後檢測顏色,所以我使用示例opencv square.c來檢測所有的正方形,但現在我需要在一個正方形中檢測紅色beetwen一些其他我可以做的嗎? – SOS

+0

我不知道我明白你的問題。最好在你的問題中添加你的圖像,以便問題清楚。無論如何,一旦你知道正方形的位置,取每個像素並檢查它是否落在紅色區域。 –

+0

請想法是如何我可以在圖像中的所有廣場之間的廣場,因爲在此之後,我會做承認,這就是爲什麼我需要只提取我需要的廣場 – SOS

26

使用cv::inRange()預處理圖像,並使用必要的顏色範圍來隔離紅色。您可能想要轉換爲像HSV或YCbCr這樣的色彩空間,以獲得更穩定的色彩邊界,因爲色度和亮度可以更好地分離。您可以使用cvtColor()。看看我的回答here是一個使用inRange()createTrackbar()的好例子。

因此,基本的模板將是:

Mat redColorOnly; 
inRange(src, Scalar(lowBlue, lowGreen, lowRed), Scalar(highBlue, highGreen, highRed), redColorOnly); 
detectSquares(redColorOnly); 

編輯:只需使用trackbars確定要隔離的顏色範圍,然後用彩色間隔,你會發現工作。您不必經常使用軌道條。

例:
所以,這裏的模板的一個完整的例子,你去,

我創建了GIMP一個簡單的(理想)的圖像,如下圖所示: enter image description here

然後我創造了這個程序來過濾所有,但紅色方塊:

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <iostream> 

using namespace std; 
using namespace cv; 

Mat redFilter(const Mat& src) 
{ 
    assert(src.type() == CV_8UC3); 

    Mat redOnly; 
    inRange(src, Scalar(0, 0, 0), Scalar(0, 0, 255), redOnly); 

    return redOnly; 
} 

int main(int argc, char** argv) 
{ 
    Mat input = imread("colored_squares.png"); 

    imshow("input", input); 
    waitKey(); 

    Mat redOnly = redFilter(input); 

    imshow("redOnly", redOnly); 
    waitKey(); 

    // detect squares after filtering... 

    return 0; 
} 

注意:您將無法將這些完全相同的濾鏡間隔用於實際圖像;我只是建議你調整跟蹤欄的間隔,看看什麼是可以接受的。

輸出看起來是這樣的:

enter image description here

瞧!只有紅色正方形仍然:)

享受:)

+0

謝謝,但我會在real_time處理中使用這個程序,所以我不能使用trackbar,因爲這個想法是檢測polygone中的紅色數字,你有什麼想法,我可以做什麼! – SOS

+0

@SarraAhmed見編輯... – mevatron

+0

你能給我一個教程或代碼來幫助我!請 – SOS

-1

您可以從RGB值使用內置函數圖像轉換爲HSV類型。你可以發現每種顏色都有一些HSV值範圍。所以你可以找到它並將其作爲閾值,並將這些點與其他點區分開來。

+2

你能提供一個與OP想要的東西有關的例子嗎?這真的會有幫助... – NREZ