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?
Ý 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
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
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 đó –