Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memutar Imej dalam OpenCV Tanpa Memangkas?

Bagaimana untuk Memutar Imej dalam OpenCV Tanpa Memangkas?

DDD
DDDasal
2024-11-16 07:42:03899semak imbas

How to Rotate an Image in OpenCV Without Cropping?

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:

  1. Pelarasan Matriks: Ubah suai matriks putaran dengan memasukkan terjemahan yang menjajarkan pusat baharu imej dengan pusat asal.
  2. Segi Segiempat Diputar: Gunakan cv::RotatedRect untuk menentukan segi empat tepat terikat yang merangkumi imej yang diputar.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn