文章目录

  • CV2实践所用到的图片
  • 1、简单读写
  • 2、图片翻转
  • 3、色彩变换
  • 4、给图片加文本
  • 5、绘图
  • 6、图像的表示

CV2实践所用到的图片

bug.png

1、简单读写

import cv2# 读入图像
img = cv2.imread("source/bug.png")# 显示图像
cv2.imshow("bug", img)
cv2.waitKey(0)  # 单位毫秒
cv2.destroyWindow("bug")# 复制图像
new_img = img.copy()# 保存图像
cv2.imwrite("bug-new.png", new_img)

2、图片翻转

im = cv2.imread("source/bug.png")
new_img = cv2.flip(im, flipCode=0)
cv2.imwrite("source/bug-flip-0.png", new_img)



Horizontal水平翻转(沿Y轴)flipCode=1、
horizontal and vertical 水平和垂直翻转(沿中心点) flipCode=-1

3、色彩变换

彩色图像转为灰度图像

im = cv2.imread("source/bug.png")
new_img = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)
cv2.imwrite("source/bug-gray.png", new_img)

cv2.COLOR_X2Y
其中X,Y = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS

4、给图片加文本


img = cv2.imread("source/bug.png", cv2.IMREAD_COLOR)# 图片对象、文本、像素、字体、字体大小、颜色、字体粗细
new_img = cv2.putText(img=img,text="OOXX",org=(60, 50),fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=1,color=(255, 0, 0),thickness=2
)
cv2.imwrite("source/bug-text.png", new_img)


添加中文字符
opencv自带的putText函数无法输出中文字符,需要借助Pillow
安装

pip install pillow numpy

代码示例

import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont# 1、将cv2转为PIL
img = cv2.imread("source/bug.png")
# cv2和PIL中颜色的hex码的储存顺序不同
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
pil_img = Image.fromarray(img)# 2、PIL图片上打印中文
draw = ImageDraw.Draw(pil_img)
font = ImageFont.truetype(font="华文黑体.ttf", size=20, encoding="utf-8")
draw.text(xy=(50, 20), text="爱我中华", fill=(0, 0, 255), font=font)# 3、PIL图片转cv2
new_img = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR)
cv2.imwrite("source/bug-text.png", new_img)

Mac本字体路径,选一个已有的字体
1、/System/Library/Fonts
2、/Library/Fonts

5、绘图


import numpy as np
import cv2# 常用颜色值
RED = (0, 0, 255)
GREEN = (0, 255, 0)
BLUE = (255, 0, 0)np.set_printoptions(threshold='nan')# 创建一个宽512高512的黑色画布,RGB(0,0,0)即黑色
img = np.zeros(shape=(512, 512, 3), dtype=np.uint8)# 画直线,图片对象,起始坐标(x轴,y轴),结束坐标,颜色,宽度
cv2.line(img=img,pt1=(0, 0),pt2=(311, 511),color=BLUE,thickness=10
)# 画矩形,图片对象,左上角坐标,右下角坐标,颜色,宽度
cv2.rectangle(img=img,pt1=(30, 166),pt2=(130, 266),color=GREEN,thickness=3
)# 画圆形,图片对象,中心点坐标,半径大小,颜色,宽度
cv2.circle(img=img,center=(222, 222),radius=50,color=(255.111, 111),thickness=-1
)# 画椭圆形,图片对象,中心点坐标,长短轴,顺时针旋转度数,开始角度(右长轴表0度,上短轴表270度),颜色,宽度
cv2.ellipse(img=img,center=(333, 333),axes=(50, 20),angle=0,startAngle=0,endAngle=150,color=RED,thickness=-1
)# 画多边形,指定各个点坐标,array必须是int32类型
pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]],dtype=np.int32
)# -1表示该纬度靠后面的纬度自动计算出来,实际上是4
pts = pts.reshape((-1, 1, 2,))
# print(pts)# 画多条线,False表不闭合,True表示闭合,闭合即多边形
cv2.polylines(img=img,pts=[pts],isClosed=True,color=(255, 255, 0),thickness=5
)# 添加文字 图片对象,要写的内容,左边距,字的底部到画布上端的距离,字体,大小,颜色,粗细
cv2.putText(img=img,text="OpenCV",org=(10, 400),fontFace=cv2.FONT_HERSHEY_SCRIPT_COMPLEX,fontScale=3.5,color=(255, 255, 255),thickness=2
)cv2.imwrite("picture.jpg", img)

6、图像的表示


图A
来自:https://www.cnblogs.com/shizhengwen/p/8719062.html

3维数组

单通道的灰度图像在计算机中的表示:一个8位无符号整形的矩阵
多通道表示 : 第一个维度是高度,第二个维度是高度,第三个维度是通道

表达方式: 高度×宽度×通道数,H×W×C
深度学习: C×H×W (就是把每个通道都单独表达成一个二维矩阵, 如图A-c)

OpenCV默认图像表示:BGR

import numpy as np
import cv2
import matplotlib.pyplot as plt# 矩阵
img = np.array([[[255, 0, 0], [0, 255, 0], [0, 0, 255]],[[255, 255, 0], [255, 0, 255], [0, 255, 255]],[[255, 255, 255], [128, 128, 128], [0, 0, 0]],
], dtype=np.uint8)# 用matplotlib存储
plt.imsave('img_pyplot.jpg', img)# 用OpenCV存储
cv2.imwrite('img_cv2.jpg', img)

左边:img_pyplot.jpg
右边:img_cv2.jpg

python【Opencv计算机视觉库】opencv模块cv2常用函数用法(全)相关推荐

  1. pythoncv2模块详细介绍_【Opencv】【Python】Python中opencv模块cv2一些函数用法及简介...

    前言 最近在做卡片上的数字识别.调用caffe模块,直接用的mnist模型,不过这篇文章不讲caffe. 需要先对图片进行一系列预处理,把卡片上的数字分离出来,有点OCR的感觉. 我把这次使用到的所有 ...

  2. Python的图像处理库(OpenCV,PIL,matplotlib和scikit-image)

      目前接触过的python图像处理代码涉及到多种的图像库,其中最常用的当属opencv和PIL.惭愧的是,以前只是拿来用,却一直迷惑为什么不同的代码会选择不同的图像库.这些图像库的联系和区别又是什么 ...

  3. 开源计算机视觉库 OpenCV 被曝两个严重的任意代码执行漏洞(详情)

    聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 开源计算机视觉库 OpenCV中修复了两个高危的缓冲区溢出漏洞,它们本可导致任意代码执行的后果. OpenCV是一款开源库,它由Inte ...

  4. C++计算机视觉库OpenCV在Visual Studio 2022的配置方法

      本文介绍在Visual Studio 2022中配置.编译C++ 计算机视觉库OpenCV的方法. 1 OpenCV库配置   首先,我们进行OpenCV库的下载与安装.作为一个开源的库,我们直接 ...

  5. Python的Numpy库的ndarray对象常用构造方法及初始化方法

    Python的Numpy库的ndarray对象常用构造方法及初始化方法 本文收集Python的Numpy库的ndarray对象常用的构造方法及初始化方法,会不断更新. 目录 1 直接赋值初始化一个nd ...

  6. python的PIL库部分模块函数

    python的PIL库部分模块函数 1.Image.open("文件路径") 打开图片文件 1.image.convert(mode) 将其转换为某模式 2.Image.new(模 ...

  7. python日历函数_Python—日历函数—日历模块的常用函数,calendar,常见

    Python-日历函数-日历模块的常用函数,calendar,常见 发表时间:2020-07-07 日历函数 calendar模块中提供了非常多的函数来处理年历和日历. 例如:打印2020年7月份的日 ...

  8. 用python 之turtle库(模块)画太极图、楼梯等

    用python 之turtle库(模块)画太极图.楼梯等 画简易的太极图 代码如下: import turtle t=turtle.Turtle() t.up() t.goto(0,-50)#设置起始 ...

  9. 【OpenCV】cv2.putText()函数用法

    文章目录 cv2.putText()函数用法 参数 字体选择 例如 cv2.putText()函数用法 cv2.putText(image, text, org, font, fontScale, c ...

最新文章

  1. Castle IOC容器实践之EnterpriseLibrary Configuration Facility
  2. 网站分析数据收集方式详解
  3. Pidgin下使用Gtalk问题
  4. python银行排队系统_socket实现银行排队系统
  5. Dart微基准测试第一部分
  6. 安卓手机玩游戏卡顿怎么解决_手机卡顿怎么办?教你3个实用解决方法,两分钟解决卡顿难题!...
  7. Android自己搭建一个实用的SharedPreferences管理类
  8. CS和BS结构的优缺点
  9. 详解深度学习框架制造原理
  10. android 城市列表 横屏,Android Launcher3去掉所有应用列表,横屏时左右两侧的留空...
  11. 虚拟机未安装音频设备_如何使用虚拟音频设备录制PC的音频
  12. 魔兽国服修改服务器地址,魔兽国服退役服务器上架暴雪官方商店
  13. python加减乘除求余
  14. windows下efi编译环境配置(EDK2)
  15. 设计模式(博客园精化集)〈转〉
  16. 采集同花顺android数据,同花顺对比app排行榜数据_SZ300033_乌龟量化
  17. 移动版rtx 4060和RX7600M XT差距 rtx4060和RX7600M XT参数对比
  18. algorithm介绍
  19. 【小知识】字符编码笔记:ASCII,Unicode 和 UTF-8
  20. 如何对GIF动图进行裁剪?GIF怎么裁剪大小?

热门文章

  1. PaddleHub 视频口罩检测
  2. task ':app:compileDebugJavaWithJavac'.错误
  3. Flask+geventwebsocket实现群聊与单聊功能
  4. pytorch 批量 iou
  5. python读取yuv
  6. opencv读取avi视频并抽取帧
  7. Qt opencv 程序异常结束,crashed
  8. matplotlib.pyplot中add_subplot方法参数111的含义
  9. Hadoop核心机制详细解析
  10. 优化选项对ARM下指针赋值的影响