2010-06-17 43 views
5

Tôi đang cố gắng phát hiện các đối tượng màu trắng trong video. Bước đầu tiên là lọc hình ảnh để nó chỉ để lại các pixel màu trắng. Cách tiếp cận đầu tiên của tôi là sử dụng không gian màu HSV và sau đó kiểm tra mức độ cao của kênh VAL. Đây là mã:Cách tốt nhất để phát hiện màu trắng là gì?

//convert image to hsv 
cvCvtColor(src, hsv, CV_BGR2HSV); 
cvCvtPixToPlane(hsv, h_plane, s_plane, v_plane, 0); 

for(int x=0;x<srcSize.width;x++){ 
    for(int y=0;y<srcSize.height;y++){ 
    uchar * hue=&((uchar*) (h_plane->imageData+h_plane->widthStep*y))[x]; 
    uchar * sat=&((uchar*) (s_plane->imageData+s_plane->widthStep*y))[x]; 
    uchar * val=&((uchar*) (v_plane->imageData+v_plane->widthStep*y))[x]; 

    if((*val>170)) 
     *hue=255; 
    else 
     *hue=0; 
    } 
} 

để lại kết quả trong kênh màu. Thật không may, cách tiếp cận này rất nhạy cảm với ánh sáng. Tôi chắc chắn có một cách tốt hơn. Bất kỳ đề xuất?

Trả lời

2

Nó sẽ nhạy cảm với ánh sáng - điều gì sẽ xảy ra nếu bạn xem nó dưới ánh sáng đỏ!
Tôi không biết liệu việc sử dụng không gian YUV có dễ dàng hơn nhiều so với việc tìm kiếm các giá trị RGB tương tự hay không.

chỉnh sửa - thông thường bạn sẽ gọi một thứ không có màu xám (có thể giúp bạn tìm kiếm).
Nếu bạn có lựa chọn, đây là màu tồi tệ nhất để tìm kiếm vì nó sẽ phản ánh bất kỳ ánh sáng nào khác trong cảnh. Vì vậy, bạn sẽ phải phát hiện màu sắc ánh sáng tổng thể và điều chỉnh cho điều đó.

Vì vậy, những gì bạn đang tìm kiếm là pixel với giá trị RGB simlar hoặc giá trị RGB theo tỷ lệ trung bình cho các đối tượng trong cảnh.

+0

Ý tôi là trắng = xám = không màu, thực ra tôi đang cố gắng phát hiện kính nhựa màu trắng. Đây là một hình ảnh mẫu: http://tinypic.com/r/14t1p1x/6 – dnul

+0

Tôi không chắc chắn, bạn đang nói rằng nếu tôi đặt một ánh sáng màu đỏ trên đầu trang thì màu sắc của kính sẽ trở thành màu đỏ bằng cách nào đó và thay vì tìm kiếm các điểm ảnh màu trắng, tôi nên tìm các pixel tương tự bất kể màu nào? – dnul

+3

nếu bạn có các vật thể màu trắng trong cảnh và chiếu sáng chúng bằng ánh sáng đỏ, chúng sẽ trông đỏ! Trong trường hợp này, bạn sẽ phải tìm màu của đối tượng 'trắng' và tìm kiếm màu đó –

2

Tại sao bạn sử dụng HSV? Nó sẽ có ý nghĩa hơn để chuyển đổi sang HSL và sử dụng kênh độ sáng. Tất nhiên bạn sẽ không chỉ nhận được màu trắng, nhưng tất cả các màu sắc với độ sáng cao trên một ngưỡng. Sau khi tất cả, bạn không thể dựa vào màu trắng tinh khiết trừ khi hình ảnh nguồn của bạn đã bị phơi sáng quá mức.

2

Một cách khác sẽ biến hình ảnh của bạn thành thang độ xám. Màu trắng sẽ có giá trị rất cao (gần như> 225).

Một cách khác sẽ là VÀ R, G và B máy bay. Chỉ những người da trắng sẽ vẫn còn trong hình ảnh kết quả. Bằng cách này, bạn không dành thời gian tính toán chuyển đổi sang không gian màu HSV. Bạn chỉ cần thực hiện thao tác AND đơn giản ở mỗi pixel.

Các vấn đề liên quan