मैं निम्नलिखित प्रभाव को प्राप्त करने की कोशिश कर रहा हूं, यहां जीआईएमपी में परिप्रेक्ष्य उपकरण का उपयोग करके दिखाया गया है।ओपनसीवी छवि परिवर्तन और परिप्रेक्ष्य परिवर्तन
मूल छवि (620x466 पिक्सल)
छवि
बदलने क्या मैं एक निश्चित वेब कैमरा है और इसके बाद के संस्करण परिवर्तन प्लगइन चाहते हैं मैट्रिक्स आंकड़े, जिसके परिणामस्वरूप एक ट्रैपेज़ियम आकार के निर्विवाद आउटपुट होते हैं।
मुझे पता है कि ओपनसीवी में छवियों को अनइस्टोर्ट करने के लिए अन्य विकल्प उपलब्ध हैं, लेकिन मैं वास्तव में एक ट्रैपेज़ियम आकार वाली छवि के साथ समाप्त होने पर रूपांतरण मैट्रिक्स आंकड़े मैन्युअल रूप से प्रदान करना चाहता हूं।
मैं चारों ओर पढ़ने से एक लग रहा है warpPerspective
, findHomography
या getPerspectiveTransform
उपयोगी हो सकता है है, लेकिन यकीन है कि सी ++
किसी भी उपयोगी सलाह बहुत सराहना की जाएगी में इस बारे में जाने के लिए कैसे नहीं।
निम्नलिखित कोड के साथ चलने का प्रयास किया लेकिन मुझे केवल 1 पिक्सेल दिखाकर खिड़की मिल गई।
शायद जिस तरह से मैंने पिक्सल में अंक निर्दिष्ट किए हैं, क्या यह सही है?
#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;
}
उत्तर देने के लिए आपको बहुत बहुत धन्यवाद, यह देखने के लिए बाद में देखें कि मुझे क्या मिलता है – winterDream