GIMP'de perspektif aracını kullanarak burada gösterilen efekti elde etmeye çalışıyorum. görüntüOpenCV görüntü dönüşümü ve perspektif değişikliği
transforme
orijinal görüntü (620x466 piksel)
Ne var sabit bir web ve yukarıda dönüşümü eklentisi istiyoruz matriks figürleri, trapez şeklindeki bozulmamış bir çıkışla sonuçlanır.
OpenCV'de görüntülerin bozulmaması için başka seçenekler olduğunu biliyorum, ancak trapez şeklindeki bir görüntü ile sonlanırken, dönüşüm matrisi rakamlarını el ile sağlamak istiyorum. Etrafa okuyunca
warpPerspective
, findHomography
veya getPerspectiveTransform
yararlı olabilir bir his var, ama herhangi bir yararlı tavsiyeler büyük takdir C++
bu konuda nasıl emin değilim.
Aşağıdaki kodla çalışmayı denedim ancak yalnızca 1 piksel gösteren bir pencere alıyorum.
Belki de piksel cinsinden nokta belirlemiş olduğum yol bu mu?
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <cv.h>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
cv::Mat OpenWarpPerspective(const cv::Mat& _image
, const cv::Point2f& _lu
, const cv::Point2f& _ru
, const cv::Point2f& _rd
, const cv::Point2f& _ld
, const cv::Point2f& _lu_result
, const cv::Point2f& _ru_result
, const cv::Point2f& _rd_result
, const cv::Point2f& _ld_result
, cv::Mat& _transform_matrix)
{
// todo do some checks on input.
cv::Point2f source_points[4];
cv::Point2f dest_points[4];
source_points[0] = _lu;
source_points[1] = _ru;
source_points[2] = _rd;
source_points[3] = _ld;
dest_points[0] = _lu_result;
dest_points[1] = _ru_result;
dest_points[2] = _rd_result;
dest_points[3] = _ld_result;
cv::Mat dst;
_transform_matrix = cv::getPerspectiveTransform(source_points, dest_points);
cv::warpPerspective(_image, dst, _transform_matrix, dst.size());
return dst;
}
int main(int argc, char** argv)
{
Mat image;
Mat edited;
image = imread("c:/org.png", CV_LOAD_IMAGE_COLOR); // Read the file
namedWindow("Display window", CV_WINDOW_AUTOSIZE);// Create a window for display.
Point2f one = (0.0, 0.0);
Point2f two = (317.0, 0.0);
Point2f three = (317.0, 240.0);
Point2f four = (0.0, 240.0);
Point2f five = (-100.0, 0.0);
Point2f six = (617.0, 0.0);
Point2f seven = (317.0, 240.0);
Point2f eight = (0.0, 240.0);
OpenWarpPerspective(image,one,two,three,four,five,six,seven,eight,edited);
imshow("Display window", edited); // Show our image inside it.
waitKey(0); // Wait for a keystroke in the window
return 0;
}
Yanıtladığınız için çok teşekkür ederim, ne yaptığımı görmek için daha sonra bunu kontrol edeceğim – winterDream