赞
踩
目录
2.计算透视变换矩阵getPerspectiveTransform()
透视变换是一种将原始图像映射到目标图像平面上的投影变换,又称为四点变换。
透视变换矩阵的一般形式如下所示:
| A B C |
| D E F |
| G H I |
通过透视变换矩阵来实现,以下是透视变换的数学公式:
对于原始图像中的点 P(x, y),经过透视变换后得到的新坐标 P'(x', y') 可以通过以下公式计算:
x' = (A * x + B * y + C) / (G * x + H * y + I)
y' = (D * x + E * y + F) / (G * x + H * y + I)
其中,(x, y) 是原始图像中点的坐标,(x', y') 是透视变换后点的新坐标。
矩阵元素 A、B、C、D、E、F、G、H 和 I 是透视变换矩阵的元素,它们决定了透视变换的具体变换方式。
CV_EXPORTS_W Mat getPerspectiveTransform(InputArray src,
InputArray dst,
int solveMethod = DECOMP_LU
);
其中计算方法标志:
通过将透视变换矩阵应用于原始图像,可以获得投影后的图像。
CV_EXPORTS_W void warpPerspective( InputArray src,
OutputArray dst,
InputArray M,
Size dsize,
int flags = INTER_LINEAR,
int borderMode = BORDER_CONSTANT,
const Scalar& borderValue = Scalar());
(原图) (透视变换处理后的图片)
- #include <jni.h>
-
- #include <string>
-
- #include <android/bitmap.h>
-
- #include <opencv2/opencv.hpp>
-
- #include <iostream>
-
- using namespace cv;
-
- using namespace std;
-
- extern "C"
-
- JNIEXPORT void JNICALL
-
- Java_com_example_myapplication_MainActivity_opencv_1test(JNIEnv *env, jclass clazz,
-
- jobject bitmap) {
-
- AndroidBitmapInfo info;
-
- void *pixels;
-
-
- CV_Assert(AndroidBitmap_getInfo(env, bitmap, &info) >= 0);
-
- //判断图片是位图格式有RGB_565 、RGBA_8888
-
- CV_Assert(info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 ||
-
- info.format == ANDROID_BITMAP_FORMAT_RGB_565);
-
- CV_Assert(AndroidBitmap_lockPixels(env, bitmap, &pixels) >= 0);
-
- CV_Assert(pixels);
-
-
- //将bitmap转化为Mat类
-
- Mat image(info.height, info.width, CV_8UC4, pixels);
-
-
- // 输入图像的四个角点
-
- Point2f src[4];
-
- src[0] = Point2f(0, 0); // 左上角
-
- src[1] = Point2f(image.cols, 0); // 右上角
-
- src[2] = Point2f(image.cols, image.rows); // 右下角
-
- src[3] = Point2f(0, image.rows); // 左下角
-
-
- // 输出图像的四个角点
-
- Point2f dst[4];
-
- dst[0] = Point2f(image.cols * 0.2, image.rows * 0.2); // 输出图像左上角
-
- dst[1] = Point2f(image.cols * 0.8, image.rows * 0.2); // 输出图像右上角
-
- dst[2] = Point2f(image.cols * 0.8, image.rows * 0.8); // 输出图像右下角
-
- dst[3] = Point2f(image.cols * 0.2, image.rows * 0.8); // 输出图像左下角
-
-
- // 计算透视变换矩阵
-
- Mat perspectiveMatrix = getPerspectiveTransform(src, dst);
-
- Mat outputImage;
-
- // 执行透视变换
-
- warpPerspective(image, outputImage, perspectiveMatrix, image.size());
-
- imwrite("/sdcard/DCIM/outputImage.jpg",outputImage);
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。