“人群里敞着一扇门”

  • 1. 颜色空间的基础知识
    • 1.1 色彩空间转换
  • 2. mat数据结构的深浅拷贝
    • ndarray的常见属性
  • 3.颜色通道的分离和合并
  • 4. 绘制图形
  • 5. 绘制英文和中文文本
    • 5.1 英文
    • 5.2 中文

系列所有代码,复制粘贴即可运行。
希望有能力的朋友还是拿C++运行一下,python对opencv再封装的时候,少了一些C库中的对象和方法。

本节讨论对颜色空间BGR,HSV等的转换,图像在opencv库中的数据结构,颜色三通道的合并分离,图形绘制和中英文文本绘制等

1. 颜色空间的基础知识

HSV也叫HSB,opencv用的最多,使用方便。

  • H:Hue 色相,如红色蓝色,用角度衡量,范围0–360, 红色0 绿色120 蓝色240
  • S:Saturation 饱和度,通常0–100,值越大颜色越饱和,就越鲜艳, 混入白色的量, 白色越少,饱和度越高
  • V/B:Value/Brightness 明度 范围0(黑)–100(白) 表示颜色明亮程度, 混入黑色的量,褐色越少,明度越高

HSL在顶部是纯白的,色相H与HSV完全一致,但是S和L不一样,S与混入黑白颜色量,没有关系:

  • H: 色相
  • S: 饱和度 指的是颜色的纯度 类似于加水的稀释程度
  • L: 明度 颜色明亮程度 控制纯色中混入的黑白两种颜色

YUV考虑到人类感知能力 允许降低色度的带宽 占用极少的带宽 多用于电视中

  • Y: luma 灰阶值 明亮度 最早的黑白电视只有Y
  • UV: chroma 色度 描述影响的色彩和饱和度 用于指定像素的颜色
  • 极少带宽 采样按百分比 4:4:4 完全 4:2:0 4个Y两个U没有V

1.1 色彩空间转换

import cv2 def callback(value):passcv2.namedWindow('color', cv2.WINDOW_NORMAL)
cv2.resizeWindow('color', 640, 480)img = cv2.imread('cat.jpeg')#常见颜色空间转换
colorspaces = [cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA, cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV,cv2.COLOR_BGR2YUV]
cv2.createTrackbar('curcolor', 'color', 0, 4, callback)while True:index = cv2.getTrackbarPos('curcolor','color')#颜色空间转换APIcvt_img = cv2.cvtColor(img, colorspaces[index])cv2.imshow('color', cvt_img)key = cv2.waitKey(10)if key & 0xff == ord('q'):break
cv2.destroyAllWindows()

2. mat数据结构的深浅拷贝

mat是储存图像的数据结构(C++)
但是在python中已经将其二次封装为ndarray格式了,丢失一些属性(成员函数)

ndarray的常见属性

  • data:表地址,直接访问不到
  • size: 元素的总个数
  • dtype: 格式
  • shape: 形状
# mat数据之共享头
# mat的深浅拷贝
import cv2
import numpy as npimg = cv2.imread('cat.jpeg')# 浅拷贝:头尾都相连
img2 = img.view()  #创建一个视图# 深拷贝, 只有头部相连
img3 = img.copy()img[10:100, 10:100] = [0, 0, 255]##横着堆叠
#cv2.imshow('img', np.hstack((img, img2, img3)))#竖着堆叠
cv2.imshow('img', np.vstack((img, img2, img3)))cv2.waitKey(0)
cv2.destroyAllWindows()

3.颜色通道的分离和合并

import cv2
import numpy as np#img = np.zeros((480, 640, 3), np.uint8)
img = cv2.imread('cat.jpeg')
b,g,r = cv2.split(img)b[10:100, 10:100] = 255
g[10:100, 10:100] = 255img2 = cv2.merge((b, g, r))cv2.imshow('img', img)
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('img2', img2)cv2.waitKey(0)
cv2.destroyAllWindows()

4. 绘制图形

  1. 画直线line(img, pt1, pt2, color, thickness, lineType, shift):
  • img: 在哪个图像上划线
  • pt1, pt2: 起始点,结束点
  • color: 画笔颜色
  • thickness: 线宽
  • lineType: 线型 有-1,4,8,16 默认8
  • shift: 坐标缩放比例
  1. rectangle()参数同上 画矩形
  2. circle(img, center, radius, color[,thickness[, lineType[, shift]]]):
  • 画圆,括号内表示可选参数
  1. 画椭圆ellipse(img, center, 长宽的一半,角度,从哪个角度开始,从哪个角度结束)
  2. 画多边形 polylines

import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)##划线只有实线
## cv2.line(img, (10, 20), (300, 400), (0, 0, 255), 5, 4)
## cv2.line(img, (80, 100), (380, 480), (0, 0, 255), 5, 16)'''
##1111111111 矩形的起终点是矩形的对角点
cv2.rectangle(img, (10, 10), (200, 200), (0, 255, 0), 5)
''''''
##22222222222  圆形 最后是线宽和去毛刺
cv2.circle(img, (320, 240), 200, (0, 0, 255), 10, 16)
''''''
##3333333333333 椭圆 用矩形框椭圆
## 画椭圆ellipse(img, center, 长宽的一半,角度,从哪个角度开始,从哪个角度结束)
#可以只画局部 控制开始角度和结束角度0 ,360
#可以任意角度控制椭圆,参数angle
cv2.ellipse(img, (320, 240), (200, 50), 0, 0, 360, (0, 0, 255), 5, 16)
#cv2.ellipse(img, (320, 240), (200, 50), 45, 0, 360, (0, 0, 255), 5, 16)
#cv2.ellipse(img, (320, 240), (200, 50), 0, 0, 180, (0, 0, 255), 5, 16)
'''##44444444444 画多边形和填充多边形,多个点连起来
#多边形点集, 32位是C语言底层的规定
pts = np.array([(250, 10), (10, 30),(150, 100), (450, 100)], np.int32)
#cv2.polylines(img, [pts], True, (0, 0, 255), 8)
cv2.fillPoly(img, [pts], (0, 0, 255), 8)cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

5. 绘制英文和中文文本

绘制英文文本和中文文本
putText
从左下角开始算

  • 显示中文得额外操作:

5.1 英文


import cv2
import numpy as np
#org 文本框左下角的定位
img = np.zeros((480, 640, 3), np.uint8)
#cv2.putText(img, 'Hello Kitti', (50, 200), cv2.FONT_HERSHEY_COMPLEX, 3, [0, 0, 255])cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

5.2 中文

曲线救国,使用pillow,再转为opencv显示

  • 导入字体: C://windows//font 下是电脑里的所有字体,复制想要的字体到我们的路径下,我这里复制的是hyswlongfangsong.ttf字体

import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image
#显示中文
#全白
img = np.full((500, 500, 3), fill_value=255, dtype=np.uint8)#导入字体: C://windows//font 下是电脑里的所有字体,复制想要的字体到我们的路径下
#这里调整字体大小
font = ImageFont.truetype('hyswlongfangsong.ttf', 35)#创建一个pillow图片
img_pil = Image.fromarray(img)draw = ImageDraw.Draw(img_pil)#利用draw绘制中文
draw.text((100, 250), '但很快就撒', font=font, fill=(0, 0, 0, 0))#重新变回ndarray
img = np.array(img_pil)cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

【opencv图像处理】--2. 颜色空间,绘制图形,绘制(中文)文本相关推荐

  1. HTML5利用Canvas绘制图形(绘制渐变、模式、变换)

    绘制渐变 渐变是一种很普遍的视觉形象,能带来视觉上的舒适感.在Canvas中,绘图API提供了两个原生的渐变方法,包括线性渐变和径向渐变.渐变,在颜色集上使用逐步抽样的算法,可以应用的描边样式和填充样 ...

  2. OpenCV:02基础知识和绘制图形

    文章目录 OpenCV的色彩空间 RGB和BGR `HSV`,`HSL`和`YUV` `HSV(HSB)` `HSL` `YUV` 颜色空间的转化 OpenCV的一种重要数据结构--Mat Mat介绍 ...

  3. OpenCV-基本图形绘制(圆、矩形、椭圆)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 circle函数原型 void circle(InputOutputArray img, Poi ...

  4. Matlab学习笔记——图形绘制

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 图形绘制 1.正弦曲线绘制 2.常用三角函数曲线的绘制 图形绘制 1.正弦曲线绘制 以产生一个简单的正弦函数曲线为 ...

  5. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  6. C# 在Excel中绘制图形

    简介 本篇文章将介绍C# 如何处理Excel图形相关的问题,包括以下内容要点: 1.绘制图形 1.1 绘制图形并添加文本到图形 1.2 添加图片到图形 1.3 设置图形阴影效果 2. 提取图形中的文本 ...

  7. 前端提高篇(六十七):HTML进阶8:canvas画布基本知识(二)绘制图形、曲线,设置图形样式,渐变

    绘制图形 绘制矩形 1.先创建矩形,再描边: canvas {border: 1px solid #000;width: 200px;height: 200px; } <canvas id=&q ...

  8. 【计算机图形学】用python的turtle进行简单的图形绘制

    [计算机图形学]用python的turtle进行简单的图形绘制 python的turtle模块 绘制图形 绘制点 绘制直线 绘制椭圆 绘制六边形 绘制n次贝塞尔曲线 结语 python的turtle模 ...

  9. XDGE_RayMarchine 1- 利用Frag Shader绘制图形

    Render/RayMarchine/Base 1- 利用Frag绘制图形 @author: 白袍小道-胡言乱语 @Read: 转载说明 目录 Render/RayMarchine/Base 1- 利 ...

最新文章

  1. 关于Webstrom连接github的配置问题。
  2. vue 父组件与子组件之间的传值(主动传值)
  3. Objective-C控制语句
  4. docker制作深度学习镜像(以windows环境下为例)
  5. 【PostgreSQL-9.6.3】触发器概述(普通触发器)
  6. 工作5年的一份总结(1)-07/09-07/11
  7. 余额宝宣布开放 中欧基金首批入驻
  8. 智能体挑战赛 - “奥林匹克 跑步运动”
  9. 算法的时间复杂度与空间复杂度
  10. linux硬盘检测工具,利用Smartmontools工具检测Linux硬盘状况 – 安装及基本应用 | 老左笔记...
  11. 计算机毕业设计Java蔚蓝在线学习平台(源码+系统+mysql数据库+Lw文档)
  12. .chm文件打开方式,解决.CHM文件打不开或者打开空白
  13. 计量经济学实验报告计算机,计量经济学实验报告记录.doc
  14. 在机器学习领域,怎样写好一篇论文
  15. 负整数的取模与取整的问题
  16. 动态规划问题(凑硬币)理解总结
  17. win10系统 ProgramData在哪里?怎么找
  18. 《未来已来- 马云》笔记
  19. postgresql 11.2 下载
  20. 【PM】从产品经理的角度探索游戏产品

热门文章

  1. PhPStorm mac最新破解版
  2. 【CV】Swin Transformer:使用 Shifted Windows 的分层视觉 Transformer
  3. Element UI学习6--Carousel 走马灯
  4. 得力如何用计算机算行列式,行列式的计算方法(课堂讲解版).docx
  5. 【245】◀▶IEW-Unit10
  6. 设置手机最小宽度为1000,无限重启怎么办
  7. html5 url 传参数,[实时数据]仪表板URL直接添加参数条件传参
  8. 王者荣耀8月15日服务器维护,王者荣耀:8月15日更新,10件装备调整,依旧互秒荣耀...
  9. (三)feild ii 相控阵聚焦成像:RF信号到成像全过程
  10. 总有人问我:独立站该怎么玩?3个案例,你看完就懂了