Tôi đang cố gắng đếm tất cả các điểm ảnh màu trắng trong hình ảnh nhị phân OpenCV. Mã hiện tại của tôi như sau:Đếm các điểm ảnh 'trắng' trong hình ảnh nhị phân opencv (hiệu quả)
whitePixels = 0;
for (int i = 0; i < height; ++i)
for (int j = 0; j < width; ++j)
if (binary.at<int>(i, j) != 0)
++whitePixels;
Tuy nhiên, sau khi lập hồ sơ với gprof tôi nhận thấy đây là một đoạn mã rất chậm và nút cổ chai lớn trong chương trình.
Có phương pháp nào có thể tính toán cùng một giá trị nhanh hơn không?
Bạn đã thử thay đổi chiều cao và chiều rộng? Tôi có nghĩa là looping trên chiều rộng và sau đó chiều cao? Điều này có thể cải thiện vòng lặp, phụ thuộc vào cách hình ảnh được bố trí trong bộ nhớ. –
Bạn có thể truy cập dữ liệu hình ảnh trực tiếp thay vì thông qua hàm at() này không? – jrok
Làm như jrok gợi ý có lẽ sẽ nhanh hơn. Tôi tự hỏi, nếu [faq này] (http://opencv.willowgarage.com/wiki/faq#How_to_access_image_pixels) có liên quan. – Brian