2013-07-05 77 views
1

使用使用cv :: Mat圖像(opencv)我如何檢測對象?

Mat image; 

我用

inRange(image,Scalar(170,100,0),Scalar(255,255,70),image); 

和我在藍色的檢測對象,但我不能畫對象周圍的矩形。

我應該使用面膜嗎?或者其他的東西?

inRange(image,Scalar(170,100,0),Scalar(255,255,70),image); 
GaussianBlur(image,image,Size(9,9),1.5); 

for(int i = 2; i <image.cols-2;i++) 
for(int j = 2; j <image.rows-2;j++){ 
    if(image.at<Vec3b>(i-1,j-1)[0] > 200 && 
    image.at<Vec3b>(i-1,j)[0] > 200 && 
    image.at<Vec3b>(i-1,j+1)[0] > 200 && 
    image.at<Vec3b>(i,j-1)[0] > 200 && 
    image.at<Vec3b>(i,j)[0] > 200 && 
    image.at<Vec3b>(i,j+1)[0] > 200 && 
    image.at<Vec3b>(i+1,j-1)[0] > 200 && 
    image.at<Vec3b>(i+1,j)[0] > 200 && 
    image.at<Vec3b>(i+1,j+1)[0] > 200 
) 
{ 

    if(min_x > i) 
     min_x = i; 
    if(min_y >j) 
     min_y = j; 
    if(max_x < i) 
     max_x =i; 
    if(max_y < j) 
     max_y = j; 

} 
} 
if(!(max_x==0 && max_y==0 && min_x==image.rows && min_y == image.cols)) 
{ 
    rectangle(image,Point(min_x,min_y),Point(max_x,max_y),CV_RGB(255,0,0),2); 
} 

    imshow("working", image); 
    if(waitKey(100) >= 0) break; 
} 

}

這不是工作和運行時錯誤。 我不知道爲什麼..幫助我!

回答

1

一些提示:

  • 您的圖片可能是CV_8U3C,但INRANGE可能將其轉換爲CV_8U,所以最好使用輸出新墊的實例。

  • 使用cv::findContours來檢測您的區域。

  • 研究meanshift研究meanshift用於通過opencv跟蹤,這可能會幫助你。

1

您不能使用RGB圖像作爲inrange方法。您應該將圖像轉換爲HSV色彩空間,然後使用藍色的色調範圍,即95-135。 RGB空間中有許多「藍色」可能性。

inRange(image,Scalar(95,0,0),Scalar(135,255,255),image); 

其結果將是一個二進制圖像,只find the contourdraw bounding rectangle周圍。