您的位置:首页 > 游戏 > 手游 > 疫情防控政策_专业餐饮设计公司_站长工具seo优化建议_友情链接

疫情防控政策_专业餐饮设计公司_站长工具seo优化建议_友情链接

2025/8/21 16:23:31 来源:https://blog.csdn.net/qq_39697468/article/details/147058294  浏览:    关键词:疫情防控政策_专业餐饮设计公司_站长工具seo优化建议_友情链接
疫情防控政策_专业餐饮设计公司_站长工具seo优化建议_友情链接

校正的过程可以分为以下几步:

1、转灰度图。

2、降噪。

3、Canny边缘检测。

4、膨胀。

5、轮廓检索。

6、从各个轮廓中选取合适的旋转角度并校正图像。

import cv2
import numpy as npdef resize_image(image, scale_factor):"""调整图像大小"""return cv2.resize(image, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_AREA)def main():# 读取图像src = cv2.imread("images/c3.jpg")if src is None:print("无法读取图像,请检查路径是否正确!")return# 调整图像大小以便展示scale_factor = 0.5  # 缩放比例src_resized = resize_image(src, scale_factor)cv2.imshow("src", src_resized)# 转灰度图gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)gray_resized = resize_image(gray, scale_factor)cv2.imshow("gray", gray_resized)# 高斯模糊降噪blur = cv2.GaussianBlur(gray, (5, 5), 1.0)blur_resized = resize_image(blur, scale_factor)cv2.imshow("gaussianBlur", blur_resized)# Canny边缘检测canny = cv2.Canny(blur, 20, 100)canny_resized = resize_image(canny, scale_factor)cv2.imshow("canny", canny_resized)# 膨胀两次,让文字连到一块kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (4, 2))expand = cv2.dilate(canny, kernel, iterations=2)expand_resized = resize_image(expand, scale_factor)cv2.imshow("dialate", expand_resized)# 检索轮廓contours, _ = cv2.findContours(expand, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)# 对各个轮廓的旋转角度进行排序vecAngles = []for contour in contours:rr = cv2.minAreaRect(contour)vecAngles.append(rr[2])  # RotatedRect.anglevecAngles.sort()# 以中间值为基准,取相差20%以内的角度的平均值作为结果midIndex = int(len(vecAngles) / 2) - 1midAngle = vecAngles[midIndex]maxAngleThreshold = midAngle + 15 if midAngle > 0 else midAngle - 15minAngleThreshold = midAngle - 15 if midAngle > 0 else midAngle + 15print("maxAngleThreshold:", maxAngleThreshold)print("minAngleThreshold:", minAngleThreshold)angleSum = 0angleCounter = 0for angle in vecAngles:print(angle)if minAngleThreshold < angle < maxAngleThreshold:angleSum += angleangleCounter += 1averageAngle = angleSum / angleCounter if angleCounter > 0 else 0print("averageAngle:", averageAngle)print("midAngle:", midAngle)# 旋转图像(h, w) = src.shape[:2]center = (w // 2, h // 2)rotateM = cv2.getRotationMatrix2D(center, averageAngle, 1.0)result = cv2.warpAffine(src,rotateM,(w, h),flags=cv2.INTER_LINEAR,borderMode=cv2.BORDER_CONSTANT,borderValue=(255, 255, 255),)result_resized = resize_image(result, scale_factor)cv2.imshow("result", result_resized)# 保存最终结果output_path = "result.jpg"cv2.imwrite(output_path, result)print(f"最终结果已保存到:{output_path}")cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == "__main__":main()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com