Python编程:cv2模块对图像处理的基本操作(2)

简介: Python编程:cv2模块对图像处理的基本操作

4、给图片加文本

  1. 加英文字符


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)
  1. 添加中文字符

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)


image.png


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)

image.png


6、图像的表示


image.png


图Aimport 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)来自: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)

image.png


参考:

模块cv2的用法

相关文章
|
9月前
|
人工智能 自然语言处理 搜索推荐
马斯克AI Grok 3 国内如何使用?请收下这篇新手指南!
Grok AI,由埃隆·马斯克(Elon Musk)旗下的人工智能初创公司 xAI 于 2023 年 11 月推出,迅速成为 AI 领域的一颗耀眼新星
3763 80
|
消息中间件 Java Kafka
CentOS 7部署Kafka和Kafka集群
CentOS 7部署Kafka和Kafka集群 注意事项 需要启动多个shell脚本交互客户端进行验证,运行中的客户端不要停止。 准备工作: 安装java并设置java环境变量,在`/etc/profile`中加入 export JAVA_HOME=/usr/java/jdk1.
3553 0
|
存储 资源调度 算法
考研操作系统【2.1 进程与线程】
程序是静态的,程序就是一个存放在磁盘里的可执行文件,是一系列指令的集合;线程是动态的,是程序的一次执行过程。进程被创建时,操作系统就会给进程分配一个唯一的、不重复的“身份证号”—— PID。
410 0
考研操作系统【2.1 进程与线程】
|
druid NoSQL Java
sa-token使用(源码解析 + 万字)一
sa-token使用(源码解析 + 万字)
3221 0
|
运维 安全 Cloud Native
开发者测评:阿里云 ACR 与其他的镜像仓库到底有什么不同?
为了帮助更多开发者了解容器镜像服务 ACR 的功能、使用方式和产品体验,阿里云容器镜像 ACR 面向广大开发者招募产品测评团,发布关于 ACR 的原创测评内容。活动正式展开仅一周的时间,已有数十位开发者发布他们对于 ACR 的使用体验。
开发者测评:阿里云 ACR 与其他的镜像仓库到底有什么不同?
|
Java 测试技术 应用服务中间件
如何让测试少加班?阿里Mock平台使用方法揭秘!
作为一名测试,我们知道不是任何情况都可以用真实对象来测,比如我们要测一个地方PM2.5超过900的情况,我们不能每天等着PM2.5的指数超过900再测试,这个时候可以用一个虚拟对象来创建测试,做一个Mock。
14596 0
|
应用服务中间件 域名解析 网络协议
|
Java 关系型数据库 中间件