Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memutar Imej dalam OpenCV Tanpa Memangkas?
Putar Imej tanpa Pangkas dalam OpenCV
Jika matlamat anda adalah untuk memutar imej sambil mengekalkan keseluruhan kandungannya tanpa sebarang pemangkasan, OpenCV menyediakan satu penyelesaian. Pertimbangkan situasi di mana anda memutarkan imej secara tradisional menggunakan cv::warpAffine, hanya untuk menghasilkan hasil yang dipotong. Artikel ini menangani isu ini dan menyediakan penyelesaian kod.
Dalam contoh kami, memutar imej menggunakan cv::getRotationMatrix2D dan menerapkannya dengan cv::warpAffine menghasilkan imej dengan sudut yang hilang. Untuk membetulkannya, kami mesti melaraskan matriks transformasi untuk mengambil kira pusat imej yang dialihkan.
Diilhamkan oleh cerapan daripada sumber berkaitan, penyelesaian kami menggunakan idea berikut:
Kod kami yang dikemas kini (diuji dengan OpenCV 3.4.1):
#include "opencv2/opencv.hpp" int main() { cv::Mat src = cv::imread("im.png", CV_LOAD_IMAGE_UNCHANGED); double angle = -45; cv::Point2f center((src.cols - 1) / 2.0, (src.rows - 1) / 2.0); cv::Mat rot = cv::getRotationMatrix2D(center, angle, 1.0); cv::Rect2f bbox = cv::RotatedRect(cv::Point2f(), src.size(), angle).boundingRect2f(); rot.at<double>(0, 2) += bbox.width / 2.0 - src.cols / 2.0; rot.at<double>(1, 2) += bbox.height / 2.0 - src.rows / 2.0; cv::Mat dst; cv::warpAffine(src, dst, rot, bbox.size()); cv::imwrite("rotated_im.png", dst); return 0; }
Kod yang dipertingkatkan ini mengekalkan kandungan penuh imej asal semasa putaran, berjaya mencapai matlamat kami untuk memutar imej tanpa memotong.
Atas ialah kandungan terperinci Bagaimana untuk Memutar Imej dalam OpenCV Tanpa Memangkas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!