1:透视变换:(四点变换)
通过imagewatch查看原图像二维码的四个角的坐标
void visionagin::PerspectiveOperate()
{
Mat twicecode1= imread("C:\\Users\\86176\\Downloads\\visionimage\\twicecode1.jpg");
if (!twicecode1.data )
{
cout << "open failed !" << endl;
}
namedWindow("变换前", WINDOW_NORMAL);
imshow("变换前", twicecode1);//使用imagewatch查看变换前后的四个角点对应坐标
Point2f src[4], dst[4];
src[0] = { 165, 9};
src[1] = { 1315,21};
src[2] = { 343,851 };
src[3] = { 1149,842};
dst[0] = { 0,0 };
dst[1] = { 1560,0 };
dst[2] = { 0, 880};
dst[3] = { 1560,880 };
Mat M;
M=getPerspectiveTransform(src, dst, 0);//计算透视变换矩阵M
Mat res;
warpPerspective(twicecode1, res, M, twicecode1.size());
namedWindow("透视变换", WINDOW_NORMAL);
imshow("透视变换", res);
imwrite("C:\\Users\\86176\\Downloads\\visionimage\\twicecode2.jpg",res);
}
结果:
2:极坐标变换:
void visionagin::PolarOperate()
{
Mat src = imread("C:\\Users\\86176\\Downloads\\visionimage\\watch3.JFIF");
imshow("src", src);
if (!src.data)
{
cout << "open failed !" << endl;
}
Mat dst;
warpPolar(src, dst, src.size(), Point2f(src.cols / 2, src.rows / 2), src.rows / 2, WARP_POLAR_LINEAR);
imshow("polar", dst);
}