opencv仿射变换和透视变换(二)实践篇

简介: opencv仿射变换和透视变换(二)实践篇

一、仿射变换


举例:基于离散点求最小外接轮廓


其主要思路是先把图像二值化,得到一系列离散的前景像素点集合,然后利用轮廓的最小外接矩形函数,得到偏斜的矩形大小与角度,通过仿射变换完成校正。代码实现如下:

int main()
{
  Mat src, gray,dst;
  src = imread("D:\\cv_study\\Exercise\\文字倾斜\\text.png");
  cvtColor(src, gray, CV_BGR2GRAY);
  threshold(gray, dst, 0, 255, CV_THRESH_BINARY_INV | CV_THRESH_OTSU);
  vector<Point>points;
  findNonZero(dst, points);
  RotatedRect box = minAreaRect(points);
  double angle = box.angle;
  if (angle < -45.)
  angle += 90.;
  printf("angle : %.2f\n", angle);
  Point2f vertices[4];
  box.points(vertices);
  for (int i = 0; i < 4; ++i)
  line(src, vertices[i], vertices[(i + 1) % 4], Scalar(0, 0, 255), 2);
  Mat rot_mat = getRotationMatrix2D(box.center, angle, 1);
  Mat rotated;
  warpAffine(src, rotated, rot_mat, src.size(), cv::INTER_CUBIC, 0, Scalar(255, 255, 255));
  waitKey();
    return 0;
}



image.png

二、透视变换


透视变换的一般过程:读入图片,获取边界点,定义目标边界点,获取转换矩阵,执行转换。

int main()
{
  Mat src = imread("D:\\cv_study\\Exercise\\Perspective Transformation\\1.jpg");
  vector<Point2f>src_coners(4);
  src_coners[0] = Point2f(13, 134);
  src_coners[1] = Point2f(271, 24);
  src_coners[2] = Point2f(180, 411);
  src_coners[3] = Point2f(398, 362);
  circle(src, src_coners[0], 3, Scalar(0, 0, 255), 3, 8);
  circle(src, src_coners[1], 3, Scalar(0, 0, 255), 3, 8);
  circle(src, src_coners[2], 3, Scalar(0, 0, 255), 3, 8);
  circle(src, src_coners[3], 3, Scalar(0, 0, 255), 3, 8);
  vector<Point2f>dst_coners(4);
  dst_coners[0] = Point2f(0, 300);
  dst_coners[1] = Point2f(0, 0);
  dst_coners[2] = Point2f(400, 300);
  dst_coners[3] = Point2f(400, 0);
  Mat warpMatrix = getPerspectiveTransform(src_coners, dst_coners);
  Mat dst;
  warpPerspective(src, dst, warpMatrix, dst.size(), INTER_LINEAR, BORDER_CONSTANT);
  waitKey();
    return 0;
}

image.png



---


参考文献:


https://blog.csdn.net/zhangjunp3/article/details/80318533


https://blog.csdn.net/zhangjunp3/article/details/80036310


相关文章
|
6月前
|
计算机视觉
opencv之形态变换
opencv之形态变换
|
6月前
|
算法 计算机视觉
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
38 0
|
7月前
|
存储 编解码 算法
【OpenCV】-霍夫变换
【OpenCV】-霍夫变换
|
7月前
|
计算机视觉 Python
轻松掌握opencv的8种图像变换
轻松掌握opencv的8种图像变换
|
7月前
|
计算机视觉
【OpenCV】-仿射变换
【OpenCV】-仿射变换
|
7月前
|
算法 计算机视觉
【OpenCV】仿射变换中cv2.estimateAffine2D 的原理
【OpenCV】仿射变换中cv2.estimateAffine2D 的原理
300 0
|
7月前
|
计算机视觉
OpenCV几何变换
OpenCV几何变换
40 0
|
2月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
393 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
3月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
51 4
|
3月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制