OpenCV image de la transformation et de la perspective du changement
Je suis en train de réaliser l'effet suivant, illustré ici à l'aide de l'outil de perspective dans GIMP.
image d'origine (620x466 pixels)
la transformation de l'image
Ce que j'ai est un fixe webcam et voudrais plugin au-dessus de la matrice de transformation de figures, résultant en un trapèze en forme de sortie sans distorsion.
Je suis conscient qu'il existe d'autres options disponibles pour undistort images dans OpenCV, mais je tiens vraiment à fournir matrice de transformation chiffres manuellement, tandis que de se retrouver avec une image en forme de trapèze.
De lecture autour, j'ai un sentiment warpPerspective
, findHomography
ou getPerspectiveTransform
peut être utile, mais vous ne savez pas comment faire cela en C++
Tout utile conseils seraient grandement appréciés.
Essayé de courir avec le code suivant, mais je n'obtiens une fenêtre avec 1 pixel de l'affichage.
Peut-être la façon que j'ai des points spécifiques de pixels, est-ce correct?
#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;
}
OriginalL'auteur winterDream | 2013-01-06
Vous devez vous connecter pour publier un commentaire.
Si vous avez trois points d'angle de l'utilisation de la Courbure transformation Affine. Si vous avez quatre points d'angle de l'utilisation de la Courbure de la Perspective de la transformation. Voici comment vous devez utiliser la Courbure de la Perspective de la transformation. Sélectionnez quatre coins de l'image. Ensuite, sélectionnez les quatre points correspondants du rectangle désiré. Warp transformer fera le reste.
OriginalL'auteur wiggily
Ouvrages Suivants:
S'il vous plaît corriger les coordonnées de l'image d'entrée, je n'ai pas obtenir la moindre idée.
OriginalL'auteur IRFAN Muhammad
ajouter l'initialisation de l'heure d'été:
Tapis de dst = _image.clone();
OriginalL'auteur Pavel Nurminsky