2013-10-04 4 views
2

라이브 비디오 스트림에서 특정 색상, 파란색을 감지하고 싶습니다. 라이브 비디오 스트림을 표시하고 HSV 및 그레이 스케일로 변경하는 다음 코드를 작성했습니다. 나는 opencv에 완전히 익숙하지 않기 때문에 다음에 무엇을해야할지 전혀 모릅니다.opencv에서 색상 감지

누군가 특정 색상을 감지하도록 코드를 완성 할 수 있습니까?

#include<opencv\cv.h> 
#include<opencv\highgui.h> 

using namespace cv; 


int main(){ 
Mat image; 
Mat gray; 
Mat hsv; 
VideoCapture cap; 
cap.open(0); 
namedWindow("window", CV_WINDOW_AUTOSIZE); 
namedWindow("gray", CV_WINDOW_AUTOSIZE); 
namedWindow("hsv", CV_WINDOW_AUTOSIZE); 

while (1){ 
    cap >> image; 
    cvtColor(image, gray, CV_BGR2GRAY); 
    cvtColor(image, hsv, CV_BGR2HSV); 
    imshow("window", image); 
    imshow("gray", gray); 
    imshow("hsv", hsv); 
    waitKey(33); 
} 
return 0; 
} 
+0

여기에 게시하기 전에 온라인으로 검색하십시오. 잠시 살펴보면 OpenCV에서 색상 감지를 설명하는이 페이지를 발견했습니다. http://opencv-srf.blogspot.com/2010/09/object-detection-using-color-seperation.html – fintelia

+0

감사합니다! 나는 이미 그 웹 사이트를 살펴 봤지만 아무 것도 이해할 수 없었습니다. 그러나 마침내 더 많은 책을 읽은 후에 나는 그 웹 사이트에서 주어진 코드를 이해할 수있었습니다. – BBB

답변

9

당신은 세 단계로이 작업을 수행 할 수 있습니다

  1. 로드 프레임을.
  2. BGR을 HSV로 변환하십시오.
  3. Inrange 사이의 값을 나타냅니다.

편집

당신은 당신의 소스 이미지에서 어떤 픽셀의 HSV 값을 찾으려면이 code를 사용할 수 있습니다. HSV 색상 공간 here에 대한 좋은 설명을 볼 수 있으며 거기에서 HSV 색상환을 다운로드하고 수동으로 HSV 범위를 찾습니다.

enter image description here

:
Mat src=imread("image.jpg"); 
Mat HSV; 
Mat threshold; 

cvtColor(src,HSV,CV_BGR2HSV); 
inRange(HSV,Scalar(106,60,90),Scalar(124,255,255),threshold); 
imshow("thr",threshold);  

가 출력된다 : 다음의 코드를 사용할 수

hsv_min--> (106,60,90) 
hsv_max-->(124,255,255) 

:

다음 범위

the comments에 공급되는 화상에 사용할 수있는
+0

질문이 있습니다. HSV로 변환 할 수 있지만 이미지에 따라 약간 다를 수있는 내 색상의 "inRange"를 정확히 어떻게 찾을 수 있습니까? http://i.stack.imgur.com/0xud4.jpg – Sohaib

+1

내 편집 된 답변보기 – Haris

+0

고마워요. 그것은 언제나 치고 재판인가? 특정 색상이 범위 사이에 있다고 어떻게 말할 수 있습니까? 예를 들어, (3,50,50)과 (19,240,240)을 내 범위로 사용했습니다. 그러나 마커가 부족합니다. 초기 범위를 (3,70,50)으로 변경하면 더 많은 마커가 감지되었지만 일부는 사라졌습니다. 나는 정말로 그 개념을 이해할 수 없다. – Sohaib