Как удалить изображение без потери пикселей, используя opencv - PullRequest
0 голосов
/ 28 апреля 2019

Как мы все знаем, мы можем использовать функцию cv::getOptimalNewCameraMatrix() с альфа = 1, чтобы получить новую CameraMatrix.Затем мы используем функцию cv::undistort(), с помощью которой новая CameraMatrix может получить изображение после искажения изображения.Тем не менее, я считаю, что изображение после искажения является таким же большим, как исходное изображение, и некоторая часть изображения после искажения покрывается черным.Итак, мой вопрос: означает ли это, что оригинальный пиксель изображения потерян?и есть ли способ избежать потери пикселей или получить изображение, размер которого больше исходного изображения с помощью opencv?

cv::Mat NewKMatrixLeft = cv::getOptimalNewCameraMatrix(KMatrixLeft,DistMatrixLeft           ,cv::Size(image.cols,image.rows),1);

cv::undistort(image, show_image, KMatrixLeft, DistMatrixLeft,NewKMatrixLeft);

Размер изображения и show_image равны 640 * 480, однако, с моей точки зрения,размер изображения после искажения должен быть больше 640 * 480, потому что некоторая его часть не имеет смысла.Спасибо!

1 Ответ

0 голосов
/ 29 апреля 2019

Чтобы исправить искажение, вы должны полностью изменить процесс, вызвавший первоначальное искажение.Это означает, что пиксели растягиваются и сжимаются в разных направлениях, чтобы исправить искажение.В некоторых случаях это отодвинет пиксели от края изображения.В OpenCV это выполняется путем вставки черных пикселей.В этом подходе нет ничего плохого.Затем вы можете выбрать, как обрезать его, чтобы удалить черные пиксели по краям.

...