改进篇opencv图片倾斜度检测(二)利用摄像头进行实时检测
利用opencv检测图片倾斜度

1.利用最小矩阵函数minAreaRect得到旋转角度

import cv2
import numpy as np
import imutils
def show(img):#显示函数cv2.imshow('img',img)cv2.waitKey(0)cv2.destroyAllWindows()
def bianyuan(img):#边缘处理img_ = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转换为灰度img_ = cv2.GaussianBlur(img_,(5,5),0)#高斯滤波去噪点img__ = cv2.Canny(img_,75,200)#Canny边缘检测return img__
def resize(img):#尺寸缩小height, width = img.shape[0:2]return cv2.resize(img1,  (int(width/4), int(height / 4)), cv2.INTER_NEAREST)def order_points(pts):#得到最大轮廓的四个坐标点# 一共4个坐标点rect = np.zeros((4, 2), dtype = "float32")# 按顺序找到对应坐标0123分别是 左上,右上,右下,左下# 计算左上,右下s = pts.sum(axis = 1)rect[0] = pts[np.argmin(s)]rect[2] = pts[np.argmax(s)]# 计算右上和左下diff = np.diff(pts, axis = 1)rect[1] = pts[np.argmin(diff)]rect[3] = pts[np.argmax(diff)]return rect
img1_path = r'C:\Users\11054\Desktop\Scan\images\page.jpg'
img1 = cv2.imread(img1_path)
img1 = resize(img1)
img1_ = bianyuan(img1)
show(img1)
# 轮廓检测
cnts = cv2.findContours(img1_.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)#检测出所有轮廓
cnts = cnts[1] if imutils.is_cv3() else cnts[0]#opencv4写法
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:5]#排序得到前五个轮廓 可以根据图片自己设定
# 遍历轮廓
for c in cnts:# 计算轮廓近似peri = cv2.arcLength(c, True)# C表示输入的点集# epsilon表示从原始轮廓到近似轮廓的最大距离,它是一个准确度参数# True表示封闭的approx = cv2.approxPolyDP(c, 0.02 * peri, True)# 4个点的时候就拿出来 因为物品是矩阵形状if len(approx) == 4:screenCnt = approx#保存下来break#在图片上描绘出来
cv2.drawContours(img1, [screenCnt], -1, (0, 255, 0), 2)
show(img1)rect = order_points(screenCnt.reshape(4, 2))#得到坐标点
print(rect)
rangle = cv2.minAreaRect(rect)[2]#minAreaRect()函数返回角度 是最低的边到x水平坐标轴的角度
print(rangle)

输出如下:



此处的角度为:85.7°

2.算出最大边缘轮廓的四个坐标点计算斜率

import cv2
import numpy as np
import imutils
def show(img):cv2.imshow('img',img)cv2.waitKey(0)cv2.destroyAllWindows()
def bianyuan(img):img_ = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)img_ = cv2.GaussianBlur(img_,(5,5),0)#去噪点img__ = cv2.Canny(img_,75,200)return img__
def resize(img):height, width = img.shape[0:2]return cv2.resize(img1,  (int(width/4), int(height / 4)), cv2.INTER_NEAREST)def order_points(pts):# 一共4个坐标点rect = np.zeros((4, 2), dtype = "float32")# 按顺序找到对应坐标0123分别是 左上,右上,右下,左下# 计算左上,右下s = pts.sum(axis = 1)rect[0] = pts[np.argmin(s)]rect[2] = pts[np.argmax(s)]# 计算右上和左下diff = np.diff(pts, axis = 1)rect[1] = pts[np.argmin(diff)]rect[3] = pts[np.argmax(diff)]return rect
img1_path = r'C:\Users\11054\Desktop\Scan\images\page.jpg'
img2_path = r'C:\Users\11054\Desktop\Scan\images\receipt.jpg'
img1 = cv2.imread(img2_path)
img2 = cv2.imread(img2_path)
img1 = resize(img1)
img1_ = bianyuan(img1)
show(img1)
# 轮廓检测
cnts = cv2.findContours(img1_.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[1] if imutils.is_cv3() else cnts[0]
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:5]# 遍历轮廓
for c in cnts:# 计算轮廓近似peri = cv2.arcLength(c, True)# C表示输入的点集# epsilon表示从原始轮廓到近似轮廓的最大距离,它是一个准确度参数# True表示封闭的approx = cv2.approxPolyDP(c, 0.02 * peri, True)# 4个点的时候就拿出来if len(approx) == 4:screenCnt = approxbreakcv2.drawContours(img1, [screenCnt], -1, (0, 255, 0), 2)
show(img1)
rect = order_points(screenCnt.reshape(4, 2))
(tl, tr, br, bl) = rect
print(rect)
print('rangle:',np.arctan((br[1]-tr[1])/(br[0]-tr[0]))*57.3)

输出:

利用霍夫变换测出直线后测出角度

opencv图片倾斜度检测(一)对图片进行检测相关推荐

  1. opencv图片倾斜度检测(二)利用摄像头进行实时检测图片中物体并画出坐标轴和倾斜度

    是在检测图片的基础上进行加工的 详情可看opencv图片倾斜度检(一)对图片进行检测 打开摄像头进行实时检测矩形轮廓,实时画出坐标轴坐标点和倾斜度,并且具有保存图片和利用plot单纯画出矩形的功能 直 ...

  2. 使用深度学习opencv 进行人脸年龄的实时检测

    2020-05-09 21:36:08 往期的文章我们分享了人脸的识别以及如何进行人脸年龄的检测,本期文章我们结合人脸识别的 模型进行人脸年龄的实时检测 人脸年龄的检测步骤 0.打开摄像头,获取图片数 ...

  3. 基于opencV的动态背景下运动目标检测及跟踪(修改版)

    基于openCV的动态背景下的运动目标检测 from: http://www.mianfeiwendang.com/doc/89c6692a222a84b2ced0d502/1 摘要:介绍在动态背景下 ...

  4. python+opencv实现机器视觉基础技术(2)(宽度测量,缺陷检测,医学检测

     本篇博客接着讲解机器视觉的有关技术和知识.包括宽度测量,缺陷检测,医学处理. 一:宽度测量   在传统的自动化生产中,对于尺寸的测量,典型的方法就是千分尺.游标卡尺.塞尺等.而这些测量手段测量精度低 ...

  5. OpenCV+Python简单实践之硬币检测以及条形码检测

    目录标题 一.简单图片格式 1.位图 2.文件压缩比 二.用奇异值分解(SVD)对一张图片进行特征值提取(降维)处理 1.代码 2.效果 三.采用图像的开闭运算(腐蚀-膨胀),检测出2个样本图像中硬币 ...

  6. 【从零学习openCV】IOS7下的人脸检测

    前言: 人脸检测与识别一直是计算机视觉领域一大热门研究方向,而且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,目前在学习ope ...

  7. 【优秀课设】基于OpenCV的Python人脸识别、检测、框选(遍历目录下所有照片依次识别 视频随时标注)

    基于OpenCV的Python人脸识别.检测.框选 (遍历目录下所有照片依次识别 视频随时标注) 移步: https://blog.csdn.net/weixin_53403301/article/d ...

  8. OpenCV+YOLO+IP摄像头实现目标检测

    title: OpenCV+YOLO+IP摄像头实现目标检测 前言 学习OpenCV.YOLO到现在我实现了调用本地摄像头使用自己训练的模型进行目标识别,然后想着能不能远程获取视频数据,然后再PC端处 ...

  9. 【OpenCV入门教程之十七】OpenCV重映射 SURF特征点检测合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨) ...

最新文章

  1. Infopath重复表分页(原创)
  2. apache php value,apache-2.2 – 错误启动Apache“php value”
  3. 启明云端分享| ESP32-C6有啥特别之处呢?性能如何,搭载的处理器是什么呢?GPIO有多少个呢?采用的框架是什么呢?
  4. helloworld讲解cocos2d-x的编程思路与要点
  5. ecshop 后台添加评论_技术小白如何添加服务号模板消息?服务号的模板消息功能到底该怎么使用?...
  6. mysql bin log 255_解析MYSQL BINLOG 二进制格式(4)--TABLE_MAP_EVENT
  7. python 数字类型判断_Python中 各种数字类型的判别(numerica, digital, decimal)
  8. C++中-运算符与.运算符的具体使用
  9. mysql 存储过程 获取错误信息 继续执行
  10. 【Java必备技能二】防止表单重复提交方法
  11. Excel、Word VBA 学习笔记
  12. 3DLC系列之:2D 曲线面板
  13. ssis oracle配置,从SSIS包SQL Server连接Oracle数据库
  14. linux修改dns地址的三种方法
  15. laravel短信验证接口思路
  16. 为你的博客引入——今日诗词、每日一言(js插件分享)
  17. 深入浅出Flask PIN
  18. 2022外卖霸王餐程序、外系统霸王餐H5/APP程序源码|美团/饿了么霸王餐系统 粉丝裂变 自带账单 在线支付提现等
  19. Spring事务管理-tx:advice标签
  20. 2020年网络工程师发展前景如何

热门文章

  1. SAN网络存储的硬盘容易损坏吗?
  2. 【100%通过率】华为OD机试真题 JavaScript 实现【打印机队列】【2023 Q1 | 100分】
  3. 由浅入深,48条JavaScript知识点总结
  4. 银河麒麟高级服务器双网卡绑定
  5. 2020年c语言考试设计题分数,2020年3月计算机等级C语言考试模拟习题集锦
  6. (已更新)文案+壁纸+头像+套图小程序源码,双版本,独立后台和无服务器版本
  7. Java面试题,Java,面试题,线程池
  8. idea创建maven项目过慢终极解决方案
  9. FPGA - Zynq - 加载 - FSBL源码解析1
  10. 初入职场的你不应错过的一些书籍