Cara mendedistorsi gambar tanpa kehilangan piksel menggunakan opencv

Seperti kita ketahui, kita bisa menggunakan fungsi cv::getOptimalNewCameraMatrix() dengan alpha = 1 untuk mendapatkan CameraMatrix baru. Kemudian kita menggunakan fungsi cv::undistort() dengan CameraMatrix baru yang bisa mendapatkan gambar setelah distorsi. Namun, menurut saya gambar setelah distorsi sama besar dengan gambar aslinya dan beberapa bagian gambar setelah distorsi ditutupi dengan warna hitam. Jadi pertanyaan saya adalah :Apakah ini berarti piksel gambar asli hilang? dan apakah ada cara untuk menghindari hilangnya piksel atau mendapatkan gambar yang ukurannya lebih besar dari gambar asal dengan opencv?

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

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

Ukuran gambar dan show_image keduanya 640*480, namun dari sudut pandang saya, ukuran gambar setelah distorsi harus lebih besar dari 640*480 karena beberapa bagiannya tidak ada artinya. Terima kasih!


person Jacky    schedule 28.04.2019    source sumber


Jawaban (1)


Untuk memperbaiki distorsi, pada dasarnya Anda harus membalikkan proses yang menyebabkan distorsi awal. Ini menyiratkan bahwa piksel diregangkan dan ditekan ke berbagai arah untuk memperbaiki distorsi. Dalam beberapa kasus, hal ini akan menjauhkan piksel dari tepi gambar. Di OpenCV, hal ini ditangani dengan memasukkan piksel hitam. Tidak ada yang salah dengan pendekatan ini. Anda kemudian dapat memilih cara memotongnya untuk menghilangkan piksel hitam di tepinya.

person Paul92    schedule 29.04.2019