OpenCV实现平场校正的代码实例
时间: 2024-06-11 15:08:02 浏览: 13
以下是用OpenCV实现平场校正的代码实例:
```python
import cv2
import numpy as np
# 读取原始图像
img = cv2.imread('original.jpg')
# 将图像转换为灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 对灰度图像进行二值化处理
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
# 寻找图像的轮廓
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
# 寻找图像的最大轮廓
max_area = 0
for i in range(len(contours)):
area = cv2.contourArea(contours[i])
if area > max_area:
max_area = area
max_contour = contours[i]
# 获取图像的外接矩形
rect = cv2.minAreaRect(max_contour)
box = cv2.boxPoints(rect)
box = np.int0(box)
# 计算旋转角度
if rect[1][0] < rect[1][1]:
angle = rect[2] + 90
else:
angle = rect[2]
# 旋转图像
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2,rows/2),angle,1)
img_rotated = cv2.warpAffine(img,M,(cols,rows))
# 截取矫正后的图像
x1,y1 = box[1]
x2,y2 = box[3]
if x1 < x2:
x1,x2 = x2,x1
if y1 < y2:
y1,y2 = y2,y1
img_corrected = img_rotated[y2:y1,x2:x1]
# 显示原始图像和矫正后的图像
cv2.imshow("Original Image", img)
cv2.imshow("Corrected Image", img_corrected)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码的主要步骤是:
1. 读取原始图像并将其转换为灰度图像;
2. 对灰度图像进行二值化处理,寻找图像的轮廓,并找到最大的轮廓;
3. 获取图像的外接矩形,并计算旋转角度;
4. 旋转原始图像;
5. 根据旋转后的图像的外接矩形截取矫正后的图像;
6. 显示原始图像和矫正后的图像。
这段代码可以处理任意方向的图像,将其矫正为水平方向。