OpenCV chỉ hỗ trợ ROI hình chữ nhật.
Tuy nhiên, để thực hiện một số xử lý cho các pixel cụ thể, bạn có thể sử dụng một số chức năng trợ giúp.
Một trong số đó là pointPolygonTest(), cho bạn biết một pixel nhất định không thuộc về đa giác.
Vì vậy, bạn có thể viết một cái gì đó giống như
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
if(pointPolygonTest(Point(i,j),myPolygon))
{
// do some processing
}
}
}
Ngoài ra kiểm tra mẫu này http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/point_polygon_test/point_polygon_test.html#point-polygon-test
khác (nhanh hơn) lựa chọn là một trong những sugested bởi @ andeas-haferburg. Tạo một mặt nạ bằng cách vẽ đa giác của bạn trong một hình ảnh màu xám mới:
drawPoly()
(Vì vậy, nền đó là 0, và đa giác là 255), Sau đó, bạn có thể vượt qua đối với một số chức năng khác, hoặc sử dụng nó bằng cách tự hỏi:
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
if(mask[j+w*i]))
{
// do some processing
}
}
}
Ví dụ trên chỉ là mã giả, bạn phải làm cho nó hoạt động.
Bạn có lỗi đánh máy trong tiêu đề. Ngoài ra, hầu hết các hàm OpenCV đều có tham số mặt nạ và chỉ hoạt động trên vùng đầu vào của chúng, trong đó mặt nạ có giá trị đặc biệt. Bạn thực sự muốn làm gì? –
Tôi muốn sử dụng phép chiếu ngược biểu đồ trên các pixel trong đường bao được xác định trước. Vì vậy, về cơ bản tôi sẽ chỉ tạo ra một mặt nạ màu đen và trắng của đường viền đầy đó và sau đó sử dụng nó như một mặt nạ cho hình ảnh tôi muốn sử dụng backprojection histogram trên? – user1017485
nếu bạn không muốn nhận điểm ảnh trong đường bao, như được đề xuất trước khi che đường viền (vẽ đường viền - màu trắng trên nền đen rồi sử dụng nó làm mặt nạ trên hình ảnh gốc) là cách hiển nhiên. – AruniRC