python如何将图片摆正?
a4纸张文件图片拍歪了,怎么在python中批量摆正?
网友回复
Python提供了多种库和方法来实现这一功能。以下是几种常用的图片摆正方法:
1. 基于OpenCV的图像校正
OpenCV是最常用的图像处理库,提供了多种图像校正方法:
1.1 基于边缘检测和霍夫变换的校正
import cv2
import numpy as np
import math
def deskew_image(image_path, output_path=None):
# 读取图像
image = cv2.imread(image_path)
# 转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
# 霍夫线变换
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
if lines is not None:
# 计算倾斜角度
angles = []
for line in lines:
rho, theta = line[0]
# 只考虑接近水平或垂直的线
if (theta < np.pi/4 or theta > 3*np.pi/4):
angles.append(theta)
if angles:
# 计算平均角度
median_angle = np.median(angles)
# 将角度转换为度数
angle = median_angle * 180 / np.pi
# 调整角度(确保角度在-45到45度之间)
if angle > 45:
angle = 90 - angle
elif angle < -45:
angle = -90 - angle
# 获取图像中心
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
# 旋转图像
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
# 保存结果
if output_path:
cv2.imwrite(output_path, rotated)
return rotated
# 如果没有检测到线条,返回原图
if output_path:
cv2.imwrite(output_path, image)
return image
# 使用示例
deskew_image("tilted_image.jpg", "corrected_image.jpg") 1.2 基于文本行的校正(适用于文档图像)
import cv2
import numpy as np
def correct_skew(image_path, output_path=None, delta=1, limit=5):
# 读取图像
image = cv2.imread(image_path)
# 转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化处理
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
# 计算各个角度的投影,找到文本行最整齐的角度
scores = []
angles = np.arange(-limit, limit + delta, delta)
for angle in angles:
# 旋转图像
(h, w) = thresh.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(thresh, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
# 计算水平投影
hist = cv2.reduce(rotated, 1, cv2.REDUCE_SUM, dtype=cv2.CV_32S)
# 计算投影的方差(方差越大,说明文本行越整齐)
score = np.var(hist)
scores.append(score)
# 找到得分最高的角度
best_angle = angles[np.argmax(scores)]
# 旋转原始图像
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, best_angle, 1.0)
rotated...点击查看剩余70%
如何让ai帮我自动在小红书或抖音上自动根据需求截流与潜在客户聊天拉客?
如果用go编写一个在virtualbox中启动的简单操作系统?
go如何搭建一个零信任网络?
如何用python实现一个公网代理访问软件?
如何用go实现一个公网代理访问软件?
如何用python实现一个内网穿透打洞程序,实现内网的80端口暴露到公网上可以访问?
如何用go实现一个内网穿透打洞程序,实现内网的80端口暴露到公网上可以访问?
何为Shadowsocks 代理?
python如何实现类似php的opendir目录相互隔离的fastcgi多租户虚拟空间?
nodejs如何实现类似php的opendir目录相互隔离的fastcgi多租户虚拟空间?


