c++利用opencv对图片进行倾斜校正
时间: 2023-06-02 09:02:51 浏览: 166
opencv+C++有效识别图片中的各种矩形
1. 读取图片
使用cv2.imread()函数读取图片,注意需要将图片路径作为参数传入。
2. 灰度化
使用cv2.cvtColor()函数将彩色图片转换为灰度图片。
3. 边缘检测
使用cv2.Canny()函数对灰度图片进行边缘检测。
4. 寻找轮廓
使用cv2.findContours()函数寻找图片中的轮廓。
5. 寻找最大轮廓
使用max函数找到最大的轮廓。
6. 拟合矩形
使用cv2.minAreaRect()函数拟合最大轮廓的矩形。
7. 获取旋转角度
通过矩形的角度属性获取矩形的旋转角度。
8. 旋转图片
使用cv2.getRotationMatrix2D()函数获取旋转矩阵,然后使用cv2.warpAffine()函数对图片进行旋转。
9. 展示结果
使用cv2.imshow()函数展示结果。
完整代码如下:
```
import cv2
import numpy as np
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
contours, hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cnt = max(contours, key = cv2.contourArea)
rect = cv2.minAreaRect(cnt)
angle = rect[2]
if angle < -45:
angle += 90
h, w = img.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
cv2.imshow("Original Image", img)
cv2.imshow("Rotated Image", rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,image.jpg是待处理的图片路径。
阅读全文