2013-11-25 15 views
5

câu hỏi dễ dàng nhưng không thể hiểu được.Làm thế nào để cv :: mặt nạ trông giống như cho opencv minMaxLoc?

normaly void minMaxLoc (InputArray src, double * minVal, double * maxVal = 0, Point * minLoc = 0, Point * maxLoc = 0, InputArray mask = noArray()) Nhưng mặt nạ trông như thế nào?

Đây là những gì tôi muốn: Một chiều một chiều (chỉ một hàng) và tôi muốn vị trí minMax của một khoảng (thấp hơn đến upperBorder) của Mat (maxRowGChnnl).

int lowerBorder,upperBorder; 
lowerBorder = 30; 
upperBorder = 100; 
cv::minMaxLoc(maxRowGChnnl.row(0),&minValue,&maxValue,&minLoc,&maxLoc,(lowerBorder,upperBorder)); 

Đây là kích thước maxRowGChnnl:

maxRowGChnnl {flags=1124024325 dims=2 rows=1 ...} cv::Mat 
flags 1124024325 int 
dims 2 int 
rows 1 int 
cols 293 int 

Đoạn mã trên abborts với:

OpenCV Error: Assertion failed ((cn == 1 && (mask.empty() || mask.type() == CV_8 
U)) || (cn >= 1 && mask.empty() && !minIdx && !maxIdx)) in unknown function, fil 
e ..\..\..\src\opencv\modules\core\src\stat.cpp, line 787 

Nhờ sự giúp đỡ của bạn.

Trả lời

5

Bạn không thực sự cần mặt nạ, nhưng ma trận phụ của maxRowGChnnl. Bạn có thể làm điều này bằng cách:

cv::minMaxLoc(maxRowGChnnl(Rect(lower,0,upper-lower,0)),&minValue,&maxValue,&minLoc,&maxLoc); 
+0

đây là câu trả lời tôi đã suy nghĩ (cách thức giải quyết). Nhưng thực tế nó không hoạt động. Khi in maxLoc tôi reseave [-1, -1]. Khi in maxRowGChnnl (cv :: Rect (thấp hơn, 0, trên-dưới, 0)) đầu ra là [] - trống. Nhưng Mat maxRowGChnnl có giá trị trong đó! Tôi đang làm gì sai? – user1651460

+1

Oups. Lỗi của tôi. Chiều cao nên là 1 tất nhiên. Không 0. Sử dụng maxRowGChnnl (cv :: Rect (thấp hơn, 0, upper-lower, 1)) –

+0

Hoàn hảo. Đó là nó! okay tôi thấy việc xây dựng của rect ngay bây giờ. – user1651460

4

mặt nạ phải là cv :: Mat có cùng kích thước như axRowGChnnl.row (0) và nhập CV_8UC1. Các yếu tố được bật phải có các giá trị bằng 1 bị vô hiệu hóa 0.

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