做项目越来越感觉到需要学的东西很多,但完成之后又觉得随着时间流逝,很多东西又变得模糊甚至是完全遗忘,所以在此进行记录与梳理。参考的会放在下方的链接里

首先是实现图片显示鼠标移动的痕迹(左键按下后),然后倾斜矫正

先看效果图(画线的时候,线是随着鼠标的位置实时演示,能够看到自己画的线

画矩形时需要将对应的cv.line改成cv.rectangle即可,填上对应point1或point2和当前坐标即可

线代码段:

import cv2 as cv
import numpy as np
import mathglobal img
global point1, point2
global average
def on_mouse(event, x, y, flag, param):global img,  point1, point2, averageimg2 = img.copy()if event == cv.EVENT_LBUTTONDOWN:   #左键点击point1 = (x,y)cv.circle(img2, point1, 10, (0,255,0), 5)cv.imshow('image', img2)elif event == cv.EVENT_MOUSEMOVE and (flag & cv.EVENT_FLAG_LBUTTON):  #按住左键拖曳cv.line(img2, point1, (x,y), (255,0,0), 2)cv.imshow('image', img2)elif event == cv.EVENT_LBUTTONUP:    #左键释放point2 = (x,y)cv.line(img2, point1, point2, (0,0,255), 5)cv.imshow('image', img2)#反正切,此处简化,需要考虑除数为0的情况average = math.atan((point1[1] - point2[1]) / (point1[0] - point2[0]))img = cv.imread('10.png') #此处更改图片路径img = cv.resize(img, (540, 540), interpolation=cv.INTER_LINEAR)#改变了一下大小cv.namedWindow('image')
cv.setMouseCallback('image', on_mouse)
cv.imshow('image', img)
cv.waitKey(0)the_angel = int(average * 180 / np.pi)
rows, cols ,n= img.shape
#需要理解旋转的角度,近似在图像中心进行旋转
M = cv.getRotationMatrix2D((cols / 2, rows / 2), (the_angel+90), 1)
dst = cv.warpAffine(img, M, (cols, rows))
cv.imshow('image1', dst)
cv.waitKey(0)
cv.imwrite("10_result.png",dst)#保存结果
cv.destroyAllWindows()

矩形代码段:

import cv2 as cv
import numpy as npdef nothing(args):passglobal img
global point1, point2
global min_x,min_y,width,height
def on_mouse(event, x, y, flags, param):global img, point1, point2global min_x ,min_y ,width, heightimg2 = img.copy()if event == cv.EVENT_LBUTTONDOWN:         #左键点击point1 = (x,y)cv.circle(img2, point1, 10, (0,255,0), 5)cv.imshow('image', img2)elif event == cv.EVENT_MOUSEMOVE and (flags & cv.EVENT_FLAG_LBUTTON):               #按住左键拖曳cv.rectangle(img2, point1, (x,y), (255,0,0), 2)cv.imshow('image', img2)elif event == cv.EVENT_LBUTTONUP:         #左键释放point2 = (x,y)cv.rectangle(img2, point1, point2, (0,0,255), 5)cv.imshow('image', img2)min_x = min(point1[0],point2[0])min_y = min(point1[1],point2[1])width = abs(point1[0] - point2[0])height = abs(point1[1] -point2[1])cut_img = img[min_y:min_y+height, min_x:min_x+width]cv.imwrite('part_10.jpg', cut_img)
img = cv.imread('10.png')img = cv.resize(img, (540, 540), interpolation=cv.INTER_LINEAR)cv.namedWindow('image')
cv.setMouseCallback('image', on_mouse)
cv.imshow('image', img)
cv.waitKey(0)

参考:https://docs.opencv.org/3.4/da/d6e/tutorial_py_geometric_transformations.html(官网)

https://www.jb51.net/article/167369.htm

基于python-opencv实现鼠标绘制矩形、直线并根据直线斜率实现图片旋转相关推荐

  1. OpenCv——5鼠标绘制矩形

    1.目的:鼠标绘制矩形 2.关键API介绍:setMouseCallback,为指定窗口设定鼠标回调函数 rectangle矩形绘制 3.main函数 Rect rect_angle = Rect(0 ...

  2. python opencv 双击鼠标绘制圆

    10-python opencv 双击鼠标绘制圆 10-python opencv 双击鼠标绘制圆 概述 实现过程 引用与创建空图 设置回调函数 回调上述函数 显示图像 源代码 运行结果 参考 概述 ...

  3. 番外3. Python OpenCV 中如何绘制各种图形?

    本系列专栏写作方式 本系列专栏写作将采用首创的问答式写作形式,快速让你学习到 OpenCV 的初级.中级.高级知识. 3. Python OpenCV 中如何绘制各种图形? 本篇博客主要分享一下在 P ...

  4. python+opencv获取最小外接矩形

    python+opencv获取最小外接矩形 环境 代码 效果 环境 python版本:3.8 opencv版本:4.3.0.36 代码 from PIL import Image from pylab ...

  5. Python之PIL之绘图:基于Python的PIL库绘制各种图形、添加文字等

    Python之PIL之绘图:基于Python的PIL库绘制各种图形.添加文字等 目录 一.绘制各种形状各种案例 1.绘制矩形 2.绘制圆形.弧线形

  6. Python OpenCV实现鼠标画框

    Python OpenCV实现鼠标画框 使用Python+OpenCV实现鼠标画框的代码: # -*-coding: utf-8 -*- """@Project: Int ...

  7. 基于python+OpenCV的车牌号码识别

    基于python+OpenCV的车牌号码识别 车牌识别行业已具备一定的市场规模,在电子警察.公路卡口.停车场.商业管理.汽修服务等领域已取得了部分应用.一个典型的车辆牌照识别系统一般包括以下4个部分: ...

  8. 基于python opencv人脸识别的签到系统

    基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...

  9. 基于Python+OpenCV车道线检测(直道和弯道)

    基于Python+OpenCV车道线检测(直道和弯道) 基于Python+OpenCV车道线检测(直道和弯道)

最新文章

  1. java 泛型 引用_Java嵌套自引用泛型
  2. ASP.NET知识集
  3. vb.net中东软医保接口的调用
  4. c语言检查密码是否出现回文,C程序检查数字是否为回文
  5. 地表最强mysql命令行连接工具mycli
  6. calibration trl 设计_校准:怎样设计和验证TRL校准件以及TRL校准的具体过程
  7. 九种食物摆脱便秘烦恼 - 生活至上,美容至尚!
  8. JavaSocket编程简单入门
  9. c语言入门自学 零基础学c语言教程
  10. 软件推荐┊最有效防止被聚生网管、P2P终结者等管理软件控制的小工具——ARP防火墙单机版
  11. HL-1208机器清零方法
  12. 微信公号开发实战之智能翻译
  13. Arduino实验——EMW3080实现WiFi连接
  14. php面试题狼兔,面试题总结 - 疯狂的兔子的个人空间 - OSCHINA - 中文开源技术交流社区...
  15. 首经贸电子信息复试软件工程导论
  16. OSChina 周二乱弹 ——程序员在聊天中注意观察什么细节
  17. 模板模式--servlet模板模式的应用
  18. mysql主从安装配置
  19. 计算机导论——多媒体技术04
  20. springboot读取linux文件_spring\-boot以jar包方式时读取resource或是template文件 | Prayer's Laputa...

热门文章

  1. Call Legs是什么鬼
  2. 常用网络数据包丢失的分析与处理
  3. Black Hat Python3 Chapter4
  4. 鲁大师9m超级精简版
  5. 【java毕业设计】基于javaEE+原生Servlet+MySql的Web停车场管理系统设计与实现(毕业论文+程序源码)——停车场管理系统
  6. 计算机二级C语言100套题
  7. 轮滑基础(一)(前摔,葫芦步,推步,A字转弯,弓步转弯)
  8. Javascript清除IE缓存
  9. springboot启动突然报错Could not resolve placeholder 'spring.datasource.driver-class-name'
  10. 最新各大CMS采集资源站解析网址合集