Tôi đang thực hiện một thao tác rất đơn giản bằng opencv nhưng tôi không hiểu tại sao tôi lại gặp phải lỗi/sự cố này. Hình ảnh được chỉnh sửa đến một nửa hình ảnh (theo chiều dọc).
Mat img = imread("/Users/tanmoy/Documents/345.jpg");
Đầu ra Mat = img.clone();
if(img.empty())
{
cout << "Không thể đọc được tập tin"<<>
return -1;
}
for(int y = 0; y < img.rows; y++){
for(int x = 0; x < img.cols; x++){
if(img.at(y,x) < 128)
đầu ra.at(y,x) = 0;
khác
đầu ra.at(y,x) = 256-1;
}
}
imwrite("/Users/tanmoy/Documents/binary.jpg", đầu ra);
Sẽ được đánh giá rất cao nếu bạn có thể xem xét vấn đề/vấn đề này. Tôi không thể tìm ra nó.
Bởi vì bạn đang xử lý hình ảnh 3 kênh (được tải theo mặc định đã đọc
) như thể đó là hình ảnh 1 kênh (bạn đang sử dụng .at
truy cập nó).
Đảm bảo làm việc với hình ảnh thang độ xám. Hoặc:
Tải trực tiếp dưới dạng thang độ xám:
Mat img = imread("/Users/tanmoy/Documents/345.jpg", IMREAD_GRAYSCALE);
Đầu ra Mat = img.clone();
Chuyển đổi sang thang độ xám:
Mat img = imread("/Users/tanmoy/Documents/345.jpg"); // Tải mặc định hình ảnh 3 kênh
cvtColor(img, img, COLOR_BGR2GRAY);
Đầu ra Mat = img.clone();
Lưu ý rằng bạn có thể tránh rõ ràng for
vòng lặp, hoặc:
sử dụng cv::ngưỡng :
Đầu ra thảm;
ngưỡng (img, đầu ra, 128, 255, THRESH_BINARY);
Sử dụng các phép toán nhị phân ma trận:
Đầu ra Mat = img > 128;
Tôi là một lập trình viên xuất sắc, rất giỏi!