Python 计算机视觉(二) —— OpenCV 基础

2023-11-01

目录

 

1. 安装配置

2. OpenCV 基础语法

(1)读取图像并显示

 (2)调整显示窗口大小

(3)调整图像尺寸大小

(4)图像灰度处理

3. 几何图形绘制

(1)绘制线段

(2)绘制矩形

(3)绘制圆形

(4)绘制椭圆

(5)添加文本 

总结


1. 安装配置

打开 Pycharm --> 点击 File --> 点击 Settings

点击 Project Interpreter --> 点击 + 号

 

搜索 OpenCV 选择合适的进行安装即可

2. OpenCV 基础语法

(1)读取图像并显示

代码如下:
我都进行了注释,以大家的聪明才智我想是小菜一碟

import cv2    # 调用opencv包
img = cv2.imread('E:\Python\StudyOfOpencv\琪琳.jpeg')   #读取图像位置
cv2.namedWindow("demo")                                  #对显示图像的窗口进行命名
cv2.imshow("demo", img)                                  #显示图像
cv2.waitKey(delay = 0)                                   #无限期等待下一个命令

运行上面所示的代码(当然读取图像路径要和你的图像存储位置一致) 

我们可以得出。。。。报错了!!

报错内容如下

cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-sn_xpupm\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
 

其实这是因为我们的存储路径中包含中文导致的,把图像命名为英文并修改路径即可

import cv2    # 调用opencv包
img = cv2.imread('E:\Python\StudyOfOpencv\qilin.jpeg')   #读取图像位置
cv2.namedWindow("demo")                                  #对显示图像的窗口进行命名
cv2.imshow("demo", img)                                  #显示图像
cv2.waitKey(delay = 0)                                   #无限期等待下一个命令

 然后我们按回车键就可以退出当前的窗口 

 至于按下回车就可以退出窗口与我们前面设置的 delay 有关

delay > 0:窗口等待delay 毫秒;

delay < 0:等待键盘单击;

delay = 0:无限期等待;

 (2)调整显示窗口大小

从显示出来的图像我们可以看出,窗口的尺寸过大,导致整个屏幕都没办法完全显示出来,所以我们要尝试改变窗口的尺寸并进行显示

改变窗口大小使用的是函数:

cv2.resizeWindow("windowname", width, height)

得到效果如下,注意是对窗口尺寸大小进行调整而不是图像尺寸大小 

(3)调整图像尺寸大小

此处参考: Opencv-python(cv2)改变图像尺寸的cv2.resize()函数

上面修改窗口的尺寸后虽然有效果,但图像的大小不进行修改则会对显示的图像进行截取,没办法让我们观察到完整的图像

调整图像的大小,我们主要使用到的函数是 cv2.resize() ,对其一些参数进行调整,得到想要的图像

data = cv2.resize(img, dsize = None, fx = 0.5, fy = 0.5,interpolation = cv2.INTER_LINEAR)  #将显示的图像宽和高都变为一半
cv2.imshow("demo", data)                                  #显示图像

运行后就可以得到如下的图像:

(4)图像灰度处理

import cv2    # 调用opencv包
img = cv2.imread('E:\Python\StudyOfOpencv\qilin.jpeg')   #读取图像位置
cv2.namedWindow("demo")                                  #对显示图像的窗口进行命名
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)          #对图像进行灰度处理
cv2.imshow("demo", img_gray)                              #显示灰度图像
cv2.waitKey(delay = 0)                                   #无限期等待下一个命令

其中下面指出的这一句代码

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)          #对图像进行灰度处理

它是对图像的通道进行修改,如果需要加强学习的可以参考:cvCvtColor函数

得到如下的灰度图像 

3. 几何图形绘制

(1)绘制线段

使用 cv2.line() 函数就可以绘制线段

import cv2    # 调用opencv包
import numpy as np
img1 = np.ones((500, 500, 3), np.uint8)        #创建一张图像
cv2.line(img1, (140, 160), (140, 320), (0, 0, 255), 3, cv2.LINE_AA)          #绘制线段
cv2.imshow(" Image ", img1)
cv2.waitKey(delay = 0)

得到下面的图像: 

然后我们对代码进行简单修改,观察图像发生的改变:

import cv2    # 调用opencv包
import numpy as np
img1 = np.ones((500, 500, 3), np.uint8)        #创建一张图像
cv2.line(img1, (140, 160), (140, 320), (0, 255, 0), 3, cv2.LINE_AA)          #绘制线段
cv2.imshow(" Image ", img1)
cv2.waitKey(delay = 0)

观察上面两处代码的不同,注意在 cv 库中改变颜色是 BGR 而不是 RGB  

如果想对图像颜色进行调整,可以参考下面的文章:

RGB颜色表

下面整个活儿:

img1 = np.ones((500, 500, 3), np.uint8)        #创建一张图像
cv2.line(img1, (120, 40), (300, 40), (255, 0, 0), 3, cv2.LINE_AA)
cv2.line(img1, (300, 40), (290, 180), (255, 0, 0), 3, cv2.LINE_AA)          #绘制线段
cv2.line(img1, (195, 50), (185, 190), (255, 0, 0), 3, cv2.LINE_AA)          #绘制线段
cv2.line(img1, (185, 190), (320, 190), (255, 0, 0), 3, cv2.LINE_AA)          #绘制线段
cv2.line(img1, (320, 190), (310, 340), (255, 0, 0), 3, cv2.LINE_AA)          #绘制线段
cv2.line(img1, (310, 340), (290, 320), (255, 0, 0), 3, cv2.LINE_AA)          #绘制线段
cv2.line(img1, (120, 280), (280, 265), (255, 0, 0), 3, cv2.LINE_AA)          #绘制线段
cv2.imshow(" Image ", img1)
cv2.waitKey(delay = 0)

(2)绘制矩形

首先像上面演示的那样可以根据线段的起点和终点绘制矩形

也可以使用 cv2.rectangle(图像,矩形左上角坐标,矩形右下角坐标,颜色) 函数进行矩形的绘制:

cv2.rectangle(img1, (100, 200), (280, 280), (0, 255, 0), 3, cv2.LINE_AA)
cv2.rectangle(img1, (80, 180), (300, 300), (0, 255, 0), 3, cv2.LINE_AA)
cv2.imshow(" Image ", img1)
cv2.waitKey(delay = 0)

(3)绘制圆形

绘制圆只要知道其圆心坐标和半径就可以了

使用 cv2.circle(图像,圆心坐标,半径,颜色,是否填充) 就可以绘制圆了

cv2.circle(img1, (250, 250), 100, (0, 0, 255), -1) #-1代表进行填充
cv2.imshow(" Image ", img1)
cv2.waitKey(delay = 0)

(4)绘制椭圆

使用 cv2.ellipse(图像,圆心坐标,长轴&短轴,起始角度,终止角度,显示弧长的角度,颜色,是否填充)就可以了 

cv2.ellipse(img1, (256, 256), (100, 50), 0, 0, 360, (0, 255, 0), -1)
cv2.imshow(" Image ", img1)
cv2.waitKey(delay = 0)

 

(5)添加文本 

使用 cv2.puttext(图像,绘制的文字,位置,字体,缩放,颜色,线宽) 就可以进行文本的添加了

下面在上图中添加文本

cv2.putText(img1, 'OpenCV', (230, 450), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)

总结

这篇文章主要介绍了 OpenCv 中的几个基础语法(读取图像、显示图像、改变图像大小等)以及绘制一些简单的几何图像(线段、圆形、椭圆、矩形等),为后面的学习打下基础

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 计算机视觉(二) —— OpenCV 基础 的相关文章

随机推荐

  • VS Code远程连接虚拟机

    太久没有使用VS Code看虚拟机的项目了 今天想看一下操作系统的代码 连接时遇到了一些比较低级的错误 便重新梳理一下整个连接流程 主要分为三步 第一VS Code下载插件 第二 虚拟机上 Ubuntu 下载ssh 第三 建立连接 Vs C
  • Layui的本地存储方法-Layui.data的基本使用 操作localstorage和sessionstorage

    http www manongjc com detail 11 jrxosqvtzledyab html
  • Git查看远程提交状态的方法

    git使用过程中 经常遇到这样的问题 已经git push 了 但是 由于冲突或者push的分支不对 导致远程的和本地的不一致 这就需要提交后查看一下远程的是否ok 查了一下资料 找到了一些方法 就做个记录吧 当程序员 要记得东西太多了 哈
  • yolo3训练自己的模型 基于TensorFlow-keras( python)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 所用到的版本 二 训练自己的模型 1 打开下载的yolo文件夹 2 建立如下目录 3 标记目标 4 修改配置 4 运行test py文件 5 运行trai
  • C++ 实现字符串逆序Hello World,输出olleH dlrow

    定义一个命名空间Myspace 包含以下函数 将一个字符串中的所有单词进行反转 并输出反转后的结果 例如 输入字符串为 Hello World 输出结果为 olleH dlrow 并在主函数内测试该函数 include
  • vue-cli3.0+tinymce实现富文本效果

    前言 之前vue用的富文本插件 tinymce 感觉还是停实用的 正好最近又用到了 在这里分享下 最下面提供中文文档 需要更多功能 或者感觉有不详细的可以看下 也可以留言问我 我看到肯定会回复的 效果 步骤 第一 安装两个插件 前者是 ti
  • JavaFX技巧6:使用透明颜色

    为用户界面元素选择正确的颜色始终是一个很大的挑战 但是当您开发可重用的框架控件时 开发人员就无法控制使用它们的应用程序的外观和感觉 这甚至更具挑战性 尽管您可能总是将元素添加到默认的灰色背景之上 但是嵌入控件的开发人员可能更倾向于哥特式风格
  • Qt交叉编译到arm平台

    从网上下载对应版本的Qt源码 https download qt io archive qt 5 9 5 9 3 single 我下载的是5 9 3的版本 解压到ubuntu上 下载使用gcc 4 9 4编译器 并配置环境变量 尽量选择高版
  • 物联网技术在智慧城市建设应用中的难点与疑点

    物联网技术在智慧城市建设应用中的难点与疑点 本文由本人发表 中国安防 第141期 2017年7月刊智慧城市栏目 徐建明 佳都科技 18971024137 Xujianming pcitech com 一 引言 物联网 概念首先由美国麻省理工
  • 这些嵌入式系统安全性的知识你需要了解

    这可能是 工程师在面对嵌入式系统应用程序的安全性时可能提出的第一个问题 不幸的是 有大量的 安全软件包 可用 并且对安全性不熟悉的嵌入式工程师可能只将安全性称为加密或病毒防护 尽管加密是安全性的一种工具 而病毒扫描程序从技术上讲可以提供安全
  • 物联网毕业设计选题推荐100例

    文章目录 1 前言 2 选题分享 2 1 嵌入式方向 2 2 算法方向 2 3 移动通信方向 2 4 学长作品展示 2 选题技巧 2 1 如何避坑 重中之重 2 2 难度把控 2 3 题目名称 3 最后 1 前言 这是学长亲手整理的物联网相
  • 无线华为能连苹果不能连接到服务器,华为手机连苹果Mac,连不上?手把手教你...

    一直都用数据线 将华为手机里的内容保存到Mac中 作为备份 比如很多大的照片 用微信等一张张传 再一张张下载又容易失真 又耽误时间 所以还是直接读取手机的内容比较方便 最近才知道有华为分享这个方法 可是按照华为官方方法 长按手机 华为分享
  • STM32F103ZET6【标准库函数开发】------05.通用定时器TIM5四个通道输出PWM信号

    STM32有四个通用定时器 现在介绍TIM5输出4路PWM的方法 下面展示主要的time c main c函数的代码 include timer h void TIM5 PWM Init u16 arr u16 psc GPIO InitT
  • SpringMVC+自定义注解实现注解拦截器

    目的 通过注解标注该请求需要进行拦截 1 自定义注解 创建名为LoginInterceptor的注解 生成javadoc时会包含注解 Documented 作用域 Target ElementType METHOD ElementType
  • PS图层混合模式超详细解答-图层混合模式的原理(Part1)

    PS图层混合模式超详细解答 图层混合模式的原理 前言 本教程非常详细 请用心看完 本教程如果有如何问题 欢迎评论区留言讨论 本教程为了避免冗余 一些不必要的截图就省略了 本教程只讨论8bit的情形下的混合 未经许可 不可转载 饮茶 在一切开
  • 【LeetCode 每日一题】53. 最大子数组和

    01 题目描述 给你一个整数数组 nums 请你找出一个具有最大和的连续子数组 子数组最少包含一个元素 返回其最大和 子数组 是数组中的一个连续部分 02 示例 示例1 输入 nums 2 1 3 4 1 2 1 5 4 输出 6 解释 连
  • 服务器安装/卸载MySQL5.7

    服务器安装 卸载MySQL5 7 本文章使用的是CentOS7 6 一 安装 1 下载MySQL 下载软件 wget i c http dev mysql com get mysql57 community release el7 10 n
  • Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10582

    Exception in thread main java lang ArrayIndexOutOfBoundsException 10582 at com thoughtworks paranamer BytecodeReadingPar
  • 【开发工具】PyChram的下载和安装(windows系统)

    PyChram的下载和安装目录 一 PyChram的下载 二 PyChram的安装 三 PyChram的使用 一 PyChram的下载 PyCharm是 种Python IDE 集成开发环境 分为专业版 professional 和社区版
  • Python 计算机视觉(二) —— OpenCV 基础

    目录 1 安装配置 2 OpenCV 基础语法 1 读取图像并显示 2 调整显示窗口大小 3 调整图像尺寸大小 4 图像灰度处理 3 几何图形绘制 1 绘制线段 2 绘制矩形 3 绘制圆形 4 绘制椭圆 5 添加文本 总结 1 安装配置 打