Python OpenCV 图像标记,取经之旅第 12 天

今天是持续写作的第 46 / 100 天。
如果你有想要交流的想法、技术,欢迎在评论区留言。

本篇博客目的:如何使用 OpenCV 在图片是添加一些图形,使用到的函数是 cv2.rectanglecv2.circle

cv2.rectangle

该函数的作用就是在图片上绘制一个简单的矩形,语法格式如下:

 cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])

该函数无返回值。
参数说明如下:

  • img : 待绘制矩形的图片;
  • pt1:矩形的起始坐标,使用元组表示,即(X 坐标,Y 坐标);
  • pt2:矩形的结束坐标,使用元组表示,同上;
  • color:要绘制矩形的边界线颜色,如果是 BGR 格式,那(255,0,0)为蓝色;
  • thinkness:矩形边界线的粗细像素,如果使用 -1 ,将填充整个矩形;
  • lineType 与 shift 参数,暂时用不上。

接下来在图片上标记一个红色矩形吧。

import cv2 as cv
import matplotlib.pyplot as plt

img = cv.imread('12.jpg', -1)
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
cv.rectangle(img, (90, 30), (280, 230), (255,0,0), 2)

plt.imshow(img)
plt.show()

效果如下:
Python OpenCV 图像标记,取经之旅第 12 天
如果将 thinkness 设置为 -1,会显示成一个红色的矩形。

cv.rectangle(img, (90, 30), (280, 230), (255,0,0), -1)

cv2.circle

看名字就知道这是用来画圆的函数了,语法格式如下:

 cv2.circle(img, center_coordinates, radius, color, thickness)

参数说明:

  • img:待绘制圆的图像;
  • center_coordinates:圆的中心坐标。使用元组表示,即(X 坐标值,Y 坐标值);
  • radius:圆的半径;
  • color:待绘制圆的边界线的颜色。对于 BGR,使用元组表示,例如:(255,0,0)为蓝色;
  • thickness:它是圆边界线的粗细像素。厚度-1 像素将以指定的颜色填充矩形。

测试代码如下:

cv.circle(img, (60, 60), 50, (0, 200, 230), 2)
plt.imshow(img)
plt.show()

Python OpenCV 图像标记,取经之旅第 12 天

其他函数

使用 OpenCV 在图像上进行标记,还有其他函数,例如 cv2.line() 画线,cv2.ellipse() 画椭圆,cv2.putText() 文字绘制。

看到这里,本能的就注意到文字绘制了,因为这里面经常会出现的一个大坑是中文乱码的问题,

接下来,就实际的尝试一下。

先看一下该函数的语法格式:

cv2.putText(img, text, org, font, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])

其中各参数说明如下:

  • img:待绘制文本的图像。
  • text:待绘制的文本字符串。
  • org:图像中文本字符串左下角的坐标。使用元组表示,即(X 坐标值,Y 坐标值)
  • font:字体类型,一些字体类型是 FONT_HERSHEY_SIMPLEXFONT_HERSHEY_PLAIN
  • fontScale:字体比例因子乘以 font-specific 基本大小
  • color:待绘制的文本字符串的颜色。对于 BGR,使用一个元组表示。例如:(255,0,0)为蓝色。
  • thickness:它是线的粗细像素。
  • lineType:可选参数,它给出了要使用的行的类型。
  • bottomLeftOrigin:可选参数。如果为 true,则图像数据原点位于左下角。否则,它位于左上角。

先使用英文尝试一波。

import cv2 as cv
import matplotlib.pyplot as plt

img = cv.imread('12.jpg', -1)
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
cv.rectangle(img, (90, 30), (280, 230), (255, 0, 0), 2)
cv.circle(img, (60, 60), 50, (0, 200, 230), 2)

# 绘制文字
cv.putText(img, 'OpenCV', (250, 250), cv.FONT_HERSHEY_SIMPLEX,
           1, (0, 190, 150), 2)

plt.imshow(img)
plt.show()

英文明显是没有问题的。
Python OpenCV 图像标记,取经之旅第 12 天
修改成中文,查看内容是否正常输出。

cv.putText(img, '梦想橡皮擦', (100, 350), cv.fon, 1, (0, 190, 150), 2)

果然如橡皮擦所料,中文乱码。
Python OpenCV 图像标记,取经之旅第 12 天
对于这部分,经过检索学习时候,发现解决办法比较固定,阅读下面的文章即可。

https://blog.csdn.net/ctwy291314/article/details/91492048

除了这种办法以外,还有一种,也可以尝试下。

python+opencv+freetype(支持 py2,py3)

OpenCV 尾声

1 个小时又过去了,对 Python OpenCV 相关的知识点,你掌握了吗?

空闲之余,可以订阅橡皮擦的爬虫百例课程学习爬虫知识。

想学 Python 爬虫,可以订阅橡皮擦专栏哦~ 🈲🈲🈲🈲 点击发现惊喜 🈲🈲🈲🈲

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想橡皮擦

如有帮助,来瓶可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值