OpenCV 04(通道分离与合并 | 绘制图形)

news2024/11/25 7:32:06

一、通道的分离与合并

- split(mat)分割图像的通道
- merge((ch1,ch2, ch3)) 融合多个通道

import cv2
import numpy as np

img = np.zeros((480, 640, 3), np.uint8)

b,g,r = cv2.split(img)

b[10:100, 10:100] = 255
g[10:100, 10:100] = 255

img2 = 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()

二、绘制图形


利用OpenCV提供的绘制图形API可以轻松在图像上绘制各种图形, 比如直线, 矩形, 圆, 椭圆等图形.

- line(img, pt1, pt2, color, thickness, lineType, shift) 画直线
  - img: 在哪个图像上画线
  - pt1, pt2: 开始点, 结束点. 指定线的开始与结束位置
  - color: 颜色
  - thickness: 线宽
  - lineType: 线型.线型为-1, 4, 8, 16, 默认为8
  - shift: 坐标缩放比例.

- rectangle() 参数同上  画矩形
- circle(img, center, radius, color, thickness, lineType, shift) 中括号内参数表示可选参数. 画圆

- ellipse(img, 中心点, 长宽的一半, 角度, 从哪个角度开始, 从哪个角度结束,...)

- polylines(img, pts, isClosed, color, thickness, lineType, shift) 画多边形


- fillPoly 填充多边形


- putText(img, text, org, fontFace, fontScale, color, thickness, lineType, shift) 绘制文本
  - text 要绘制的文本
  - org 文本在图片中的左下角坐标
  - fontFace  字体类型即字体
  - fontScale 字体大小

import cv2
import numpy as np

img = 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)

# 画矩形
# cv2.rectangle(img, (10,10), (100, 100), (0, 0, 255), -1)

# 画圆
# cv2.circle(img, (320, 240), 100, (0, 0, 255))
# cv2.circle(img, (320, 240), 5, (0, 0, 255), -1)
# 画椭圆
# cv2.ellipse(img, (320, 240), (100, 50), 15, 0, 360, (0, 0, 255), -1)

#画多边形
# pts = np.array([(300, 10), (150, 100), (450, 100)], np.int32)
# cv2.polylines(img, [pts], True, (0, 0, 255))

#填充多边形
# cv2.fillPoly(img, [pts], (255, 255, 0))

cv2.putText(img, "Hello OpenCV!", (10, 400), cv2.FONT_HERSHEY_TRIPLEX, 3, (255,0,0))
cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

- 绘制中文 opencv本身不支持, 因为没有中文字体.我们可以借助pillow来实现绘制中文

 # 安装pillow
  import cv2
  import numpy as np
  from PIL import ImageFont, ImageDraw, Image
  
  img = np.full((200, 200, 3), fill_value=255, dtype=np.uint8)
  # 导入字体文件. 
  font_path = 'msyhbd.ttc'
  font = ImageFont.truetype(font_path, 15)
  img_pil = Image.fromarray(img)
  draw = ImageDraw.Draw(img_pil)
  draw.text((10, 150), '绘制中文', font=font, fill=(0, 255, 0, 0))
  img = np.array(img_pil)
  
  # 中文会显示问号
  cv2.putText(img, '中文', (10, 100), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 1)
  
  cv2.imshow('img', img)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/989164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《TCP/IP网络编程》阅读笔记--并发多进程服务端的使用

1--并发服务器端 并发服务器端主要有以下三类: ① 多进程服务器:通过创建多个进程提供服务; ② 多路复用服务器:通过捆绑并统一管理I/O对象提供服务; ③ 多线程服务器:通过生成与客户端等量的线程提供服务&…

C/C++ ——内存管理

前言 为什么要研究内存管理? (1)程序员写的程序可以分为动态和静态两种状态。静态:就是程序被存放在ROM中,也就是磁盘、固态硬盘、eMMC等存储介质;动态:程序被执行,此时程序在RAM内存中运行; (…

图床项目数据库表设计

一、表设计 share_picture_list 和 share_file_list 类似,只是 share_picture_list 只存储共享图片相关的信息,及分享给未注册用户看的。share_file_list 是存储共享文件(包括图片文件)相关的信息,分享给已注册用户的。…

【数据结构】 七大排序详解(贰)——冒泡排序、快速排序、归并排序

文章目录 ⚽冒泡排序⚾算法步骤🎨算法优化🥎代码实现:🏀冒泡排序的特性总结 🧭快速排序⚽算法思路📌思路一(Hoare版)📌思路二(挖坑法)&#x1f4c…

PCL入门(四):kdtree简单介绍和使用

目录 1. kd树的意义2. kd树的使用 参考博客《欧式聚类(KD-Tree)详解,保姆级教程》和《(三分钟)学会kd-tree 激光SLAM点云搜索常见》 1. kd树的意义 kd树是什么? kd树是一种空间划分的数据结构,对于多个维度的数据&a…

小米汽车,能否在新能源汽车江湖站稳脚跟?

最近,圈内都在传小米汽车亦庄工厂已试生产近一个月,每周可产50辆样车,正在为首款新能源汽车量产做最后的准备。 此前的业绩交流会上,小米集团总裁卢伟冰透露,小米汽车结束了夏测且进展非常顺利,2024年上半…

计算机竞赛 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的植物识别算法 ** …

数仓学习之DWD学习

登录不是原子行为,而登录成功是, 而支付也不是原子,也分成功失败。 什么是原子型? 一条线 注意一下密码, mysql的密码是MD5加密,而MD5的长度为固定的32 1.怎么构建事务表? 1.确定表名 2.确定一行数据所表示的含义 3.确定列定义 4.确定度…

【算法训练笔记】栈的OJ题

🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️林 子       🛰️博客专栏:✈️ 小林的算法训练笔记       🛰️社区 :✈️ 进步学堂       …

rsa加密解密java和C#互通

前言 因为第三方项目是java的案例,但是原来的项目使用的是java,故需要将java代码转化为C#代码,其中核心代码就是RSA加密以及加签和验签,其他的都是api接口请求难度不大。 遇到的问题 java和c#密钥格式不一致,java使…

C++QT day3

1> 自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量 成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 2> 自行封装一个循环顺序队列的类,包含…

backward问题记录

大致问题是这样的 模型先计算一个输出 然后根据这个输出,用lbfgs去优化另一个变量 最后优化模型,大致代码如下 optimizer optim.Adam(model.parameters(), lrlr)for inputs in dataloader:outputs model(inputs)u outputs.reshape(1, -1, 1)beta to…

扫地机器人还能创新吗?云鲸给了个Yes

作者 | 辰纹 来源 | 洞见新研社 1996年,瑞典家电巨头伊莱克斯推出全球首款扫地机器人“三叶虫”。 与现在的产品相比,“三叶虫”靠随机碰撞的模式对空间进行清扫,清洁效率很低,市场渗透率也不高,但并不妨碍戴森、iRo…

表单引擎的自定义控件的概念与设计

基本概念 概述 控件的定义:用于展示或者采集数据的表单元素,称为控件,比如:文本框、下拉框、单选按钮、从表等.自定义控件:表单引擎提供的基础控件之外的控件称为自定义控件, 这些控件由开发人员自己定义,比如&#…

更灵活的 serverless framework 配置文件

更灵活的 serverless framework 配置文件 前言 再经过前置教程的部署之后,不知道你有没有注意这样一个问题,就是我们部署的函数名,以及 API网关 的 endpoint,它们的名称和路径都带一个 dev? 这个就是 stage 导致的了&#xff…

美客多选品趋势分析,美客多选品时的注意事项

都知道选品的重要性,美客多这个平台也一样,选品选对了肯定事半功倍,本文介绍了美客多选品趋势分析,美客多选品时的注意事项,一起来了解下吧。、 美客多选品趋势分析 1、墨西哥站:跨境支付高,偏…

ESP32C3 PWM输出

目前对于遥控双发差速小飞机计划采用如下架构: ESP32C3做主控,兼具遥控收发和飞行控制锂电池供电,带电量检测双发,720空心杯电机,55mm桨,带电流检测MPU6050加速度计和陀螺仪预留4个控制信号输出 马达控制要…

(Java)多线程带来的的风险-线程安全 (第一部)

前言:线程安全是整个多线程中,最为复杂的部分,也是最重要的部分。 目录 什么是线程安全问题? 线程不安全的原因 ⁜⁜总结 :线程安全问题的原因 ⁜⁜ 解决方法1 ——加锁 synchronized (监视器锁monitor…

算法与设计分析--实验一

蛮力算法的设计与分析&#xff08;暴力&#xff09; 这次是某不知名学院开学课程的第一次实验&#xff0c;一共5道题&#xff0c;来自力扣 第一题.216组合总和*力扣题目链接 第一道题是经典的树型回溯 class Solution { public:vector<vector<int>> combinatio…

红米Note12Turbo解锁BL刷入PixelExperience原生ROM系统详细教程

红米Note12Turbo的兄弟是国外POCO F5 机型&#xff0c;并且该机性价比非常高&#xff0c;国内外销量也还可以&#xff0c;自然不缺第三方ROM适配。目前大家心心念念的原生PixelExperience已成功发布&#xff0c;并且相对来说&#xff0c;适配程度较高&#xff0c;已经达到日用的…