解决方案

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@version: 0.0.1
author: ShenTuZhiGang
@time: 2021/01/25 22:14
@file: imageutil.py
@function:
@modify:
"""
import cv2
from math import *
from PIL import Image
import numpy as np
def get_sub_image(image, box, adjust=False):"""获取倾斜矫正后的子图:param image::param box::param adjust::return:"""height, width = image.shape[:2]x_length = int((box[6] - box[0]) * 0.1)y_length = int((box[7] - box[1]) * 0.2)if adjust:pt1 = (max(1, box[0] - x_length), max(1, box[1] - y_length))pt2 = (box[2], box[3])pt3 = (min(box[6] + x_length, width - 2),min(height - 2, box[7] + y_length))pt4 = (box[4], box[5])else:pt1 = (max(1, box[0]), max(1, box[1]))pt2 = (box[2], box[3])pt3 = (min(box[6], width - 2), min(height - 2, box[7]))pt4 = (box[4], box[5])# 图像倾斜角度degree = degrees(atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]))# 倾斜矫正height, width = image.shape[:2]height_new = int(width * fabs(sin(radians(degree))) +height * fabs(cos(radians(degree))))width_new = int(height * fabs(sin(radians(degree))) +width * fabs(cos(radians(degree))))mat_rotation = cv2.getRotationMatrix2D((width / 2, height / 2), degree, 1)mat_rotation[0, 2] += (width_new - width) / 2mat_rotation[1, 2] += (height_new - height) / 2img_rotation = cv2.warpAffine(image, mat_rotation, (width_new, height_new), borderValue=(255, 255, 255))pt1 = list(pt1)pt3 = list(pt3)[[pt1[0]], [pt1[1]]] = np.dot(mat_rotation,np.array([[pt1[0]], [pt1[1]], [1]]))[[pt3[0]], [pt3[1]]] = np.dot(mat_rotation,np.array([[pt3[0]], [pt3[1]], [1]]))y_dim, x_dim = img_rotation.shape[:2]img_out = img_rotation[max(1, int(pt1[1])):min(y_dim - 1, int(pt3[1])),max(1, int(pt1[0])):min(x_dim - 1, int(pt3[0]))]# height,width=imgOut.shape[:2]return img_out

参考文章

Python——基于OpenCV获取倾斜子图的一种方法相关推荐

  1. 使用Python基于OpenCV+MediaPipe追踪手势并控制音量

    利用Python基于OpenCV+MediaPipe追踪手势并实现控制音量 写在前面 说明 简介 1.OpenCV简介 2.MediaPipe简介 3.配置环境 开发环境 所需的库 最终效果演示 手部 ...

  2. Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]

    1.图片演示 2.视频演示 [项目分享]Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]_哔哩哔哩_bilibili 3.检测方法 1)方法 与用于计算眨眼的传统 ...

  3. Python基于OpenCV的智能交通灯系统(南北车流量比例)

    1.研究背景: 在传统城市道路交通信号灯的应用过程中,存在专业技术人员较缺乏.项目投入资金少.信号灯故障抢修较困难等问题,为城市居民生活与出行带来极大不便.对此,文章进行深入研究,分析了城市道路智慧交 ...

  4. Python基于OpenCV的智能交通灯系统(南北车流量比例)[源码&部署教程]

    1.研究背景: 在传统城市道路交通信号灯的应用过程中,存在专业技术人员较缺乏.项目投入资金少.信号灯故障抢修较困难等问题,为城市居民生活与出行带来极大不便.对此,文章进行深入研究,分析了城市道路智慧交 ...

  5. Python 把OpenCV 获取的图像传递到C

    Python 把OpenCV 获取的图像传递到C 2016年10月11日 14:47:49 阅读数:1946 用OpenCV Python来开发,如果想要用到一些C/C++的图像处理库,就需要创建Py ...

  6. Python基于OpenCV的人脸表情识别系统[源码&部署教程]

    1.项目背景 人脸表情识别是模式识别中一个非常重要却十分复杂的课题.首先对计算机人脸表情识别技术的研究背景及发展历程作了简单回顾.然后对近期人脸表情识别的方法进行了分类综述.通过对各种识别方法的分析与 ...

  7. Python 基于OpenCV 在一张图片上叠加点

    Python 基于OpenCV 在一张图片上叠加点 1.安装 OpenCV pip install opencv-python 2.cv2.circle 用法 cv2.circle(img, cent ...

  8. Python基于OpenCV的指针式表盘检测系统(附带源码&技术文档)

    1.背景 指针式机械表盘具有安装维护方便.结构简单.防电磁干扰等诸多优点, 目前广泛应用于工矿企业.能源及计量等部门.随着仪表数量的增加及精密仪表技术的发展,人工判读已经不能满足实际应用需求.随着计算 ...

  9. 使用Python,OpenCV获取、更改像素,修改图像通道,剪裁ROI

    使用Python,OpenCV获取.更改像素,修改图像通道,剪裁ROI 1. 效果图 2. 源码 参考 这篇博客将介绍使用Python,OpenCV获取.更改像素,修改图像通道,截取图像感兴趣ROI: ...

最新文章

  1. 如何通过手机客户端Android、Iphone 等访问要求使用客户端证书SSL加密的https网站...
  2. 开发日记-20190402
  3. python中的浅拷贝和深拷贝
  4. fastjson 过滤不需要的字段或者只要某些字段
  5. 乾坤大挪移,巧迁数据到proxmox平台
  6. [js]DOM 篇
  7. unity 热更新:C#与Lua相互调用(转载)
  8. 从html富文本中提取纯文本
  9. pandas CSV读取编码问题记录
  10. C语言中更改用户名,如何更改C:User/Administrator这个文件夹的名字
  11. EasyCVR调用Ehome协议接入的硬盘录像机设备录像无法播放,如何处理?
  12. 一种防止拍摄屏幕的新技术
  13. 今晚直播 | 泰坦尼克号经典案例分析
  14. win10计算机无法识别u盘,win10电脑无法识别U盘应该如何解决
  15. 家用计算机做raid有用吗,磁盘阵列是什么?家用有必要磁盘阵列吗
  16. [ROC-RK3568-PC] 手把手教你把出厂的Android系统烧写为Ubuntu系统
  17. PNG图片宽高crc32爆破代码
  18. 质量是企业的生命,如何破解质量管控难题?质量管理系统推荐
  19. MySQL大表传输表空间的坑
  20. 弋阳一中2021高考成绩查询,凝心聚力 干在实处——弋阳一中成功召开2020-2021学年度上学期期末总结大会...

热门文章

  1. 计算机科学与技术专业 翻译,计算机科学与技术专业外文翻译--网络.doc
  2. java负数右移_Java中负数的右移
  3. ad 原理图差分线_再改原理图,得加钱检查原理图PCB系列教程17
  4. php本地环境搭建软件下载,用EasyPHP本地搭建PHP环境的步骤分享
  5. android layout background,Android LinearLayout Gradient Background
  6. c web文件服务器,使用C++制作简单的web服务器(续).pdf
  7. php实例类,php实例-对象与类
  8. linux 内核 ntfs,Linux大脑 内核 内核编译(NTFS)
  9. php树形结构变成线性结构,php把数据集转换成树状结构,无限极分类生成树状 – CSDN博客...
  10. @vue/cli启动异常:ENOENT: no such file or directory, scandir