当前位置: 首页 > news >正文

Opencv学习

Long time no see!哈哈,假期终于有时间做一点自己喜欢的东西了

还是想说,每天花一点时间投在自己喜欢的事情上,或者专攻一些平时不学的方向,真的很酷!

图片绘制

对于图像绘制,可以分为:图像创建(对象处理)—绘制图像(操作)—图像呈现(效果呈现)。这三个步骤又可以根据需求和习惯进行库的选取,函数运用

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt# 1 创建一个空白的图像
img = np.zeros((512,512,3), np.uint8)
# 2 绘制图形
cv.line(img,(0,0),(511,511),(55,0,0),5)
#直线起点,终点,颜色
cv.rectangle(img,(384,0),(510,128),(0,255,250),3)
#矩形左上坐标,右下坐标,颜色,宽度
cv.circle(img,(447,63), 63, (0,0,255), -1)
#圆心,半径
font = cv.FONT_HERSHEY_SIMPLEX
#绘制字体
cv.putText(img,'华 ,H_lilium ',(10,500), font, 2,(200,55,255),2,cv.LINE_AA)
# font = ImageFont.truetype('simsun.ttc', 40)  # 这里使用宋体字体,你可以根据需要更改字体文件,确保字体文件存在
# cv.putText(img,'华 YU MEI',(10,500), font, 2,(200,55,255),2,cv.LINE_AA)
# 绘制中文文本
# 3 图像展示
img_rgb = cv.cvtColor(img, cv.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.rcParams['font.sans-serif']=['SimHei']#设置 matplotlib 的字体为 SimHei,这是一种支持中文的字体。
plt.title('匹配结果')
plt.xticks([]), plt.yticks([])#坐标隐藏
plt.show()

1.图像创建

一般创建出来的图像,可以控制大小、颜色通道(BGR)、色彩

# 读取图像
img = np.zeros((520, 512, 3), np.uint8)
img[:] = 255#可使创建背景图像转为白色,更容易观察颜色与形状

2.绘制函数

本次举例了直线,矩形,圆绘制。

绘制图像的函数其实很容易理解,万能公式:

cv.图像英文(操作对象img,关键点坐标,大小,颜色,线条粗细)

# 2 绘制图形
cv.line(img,(0,0),(511,511),(55,0,0),5)
#直线起点,终点,颜色
cv.rectangle(img,(384,0),(510,128),(0,255,250),3)
#矩形左上坐标,右下坐标,颜色,宽度
cv.circle(img,(447,63), 63, (0,0,255), -1)
#圆心,半径


关于字体展示有一个小点,可以注意到,输出的中文变成“?”无法识别,这是 因为选择的字体font确实汉字。我在网上找到了解决办法,不过感觉有点麻烦,要加入库,引入一个新font,还要转换图像类型。不过没关系,这也算是文字传承吧嘿嘿

import cv2 as cv
from PIL import Image, ImageDraw, ImageFont
import numpy as np# 读取图像
img = np.zeros((520, 512, 3), np.uint8)
img[:] = 255
# 将 OpenCV 图像转换为 PIL 图像
pil_img = Image.fromarray(cv.cvtColor(img, cv.COLOR_BGR2RGB))
# 创建一个可绘制对象
draw = ImageDraw.Draw(pil_img)
# 设置字体和字体大小
font = ImageFont.truetype('simsun.ttc', 40)  # 这里使用宋体字体,你可以根据需要更改字体文件,确保字体文件存在
# 绘制中文文本
draw.text((10, 50), '华 ,H_lilium', (70, 55, 150), font=font)#RGB
# 将 PIL 图像转换回 OpenCV 图像
img = cv.cvtColor(np.array(pil_img), cv.COLOR_RGB2BGR)# 显示图像
cv.imshow('Image with Chinese Text', img)
cv.waitKey(0)
cv.destroyAllWindows()

图像展示

关键的三段函数,创建图像显示窗口+显示时间+执行指令

# 显示图像
cv.imshow('Image with Chinese Text', img)
cv.waitKey(0)
cv.destroyAllWindows()

图片加法+混合

1.加法

加法可以分两类,Opencv/NumPy,简单的0.5+0.5,效果其实并不理想

注意,1.黑色部分相加无法体现  2.相加图像必须大小规格一样  3.可以利用掩膜色彩


#加法函数# 使用 OpenCV 的 add 函数进行图像加法
img3 = cv2.add(img2, img1)
# 使用 NumPy 的加法进行图像加法
img4 = img2 + img1
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
img1 = cv2.imread("D1.jpg")
img2 = cv2.imread("D3(1).jpg")# 将 img2 转换为 HSV 颜色空间
hsv = cv2.cvtColor(img2, cv2.COLOR_BGR2HSV)# 定义红色的 HSV 范围
minRed = np.array([0, 50, 50])
maxRed = np.array([60, 255, 255])# 创建掩膜
mask = cv2.inRange(hsv, minRed, maxRed)# 提取红色部分
red = cv2.bitwise_and(img2, img2, mask=mask)# 显示提取的红色部分
cv2.imshow('red', red)# 等待按键事件
cv2.waitKey(0)# 关闭所有 OpenCV 窗口
cv2.destroyAllWindows()# 使用 OpenCV 的 add 函数进行图像加法
img3 = cv2.add(img2, img1)# 使用 NumPy 的加法进行图像加法
img4 = img2 + img1# 再次使用 OpenCV 的 add 函数进行图像加法
img5 = cv2.add(img1, img2)# 创建子图
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8), dpi=100)# 显示原始图像
axes[0, 0].imshow(img1[:, :, ::-1])
axes[0, 0].set_title('原始图像 1')# 显示原始图像
axes[0, 1].imshow(img2[:, :, ::-1])
axes[0, 1].set_title('原始图像 2')# 显示 OpenCV 加法结果
axes[1, 0].imshow(img3[:, :, ::-1])
axes[1, 0].set_title('OpenCV 加法')# 显示 NumPy 加法结果
axes[1, 1].imshow(img4[:, :, ::-1])
axes[1, 1].set_title('NumPy 加法')# 调整子图布局
plt.tight_layout()# 显示图像
plt.show()

2.混合

图像混合根据占比调制参数,对图像要求与加法一致。混合更能满足对图像的融洽处理
#图像混合
img5=cv2.addWeighted(img1,0.3,img2,0.7,0)

3.数列处理

引入数列来呈现图像,能更清晰地了解图像的变化(行+列+分辨率)

# 创建子图
fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(10, 8), dpi=100)# 显示原始图像
axes[0, 0].imshow(img1[:, :, ::-1])
axes[0, 0].set_title('原始图像 1')

有趣的图像绘制

在小学的时候,就对数学很感兴趣,有一次同学打趣到那我们来挑战画正17边形吧,我一口答应下来。结局是谁也没有画出正17边形,但是我却发现了一个美妙的,永远画不完的图形,当时非常兴奋,暗暗得意“我长大一定要研究清楚,然后成为一名数学家”哈哈哈,这个思想一直存活至高中,后来在学斐波那契额数列时,见到了一个极其相似的图像,我当时没有失落也没有遗憾,反而有些庆幸——我跨越了时间的限制,悄悄与不知名的人来了一次心灵意识的交汇。后来,我就手绘了这一副图,放在了我的数学错题本上,并暗自发誓“一定要用机械语言将这个美丽的图像以我的方式展示出来”

到了大学,学了编程语言,似乎一切想法都不再是遥不可及了。到了寒假,嘿嘿,我好像实现了承诺,和小小的自己也完成了一次心灵的交汇!(当然,还有豆包帮了大忙),虽然只是简单的理想图像的呈现,没有体现我的“中交线”无限绘图,而是“定点”有限次绘图,但是也是一大突破点啦!

顺势一说,为了体现这一过程,还用了动画哟

import cv2 as cv
import numpy as np
import timedef main():center = (256, 256)#定圆心radius = 230#距离圆心范围,点的半径num_points = 16#所需要的个数points = []#空列表用于储存点for i in range(num_points):# 计算每个点的角度angle = 2 * np.pi * i / num_points#2Π/点数# 计算点的坐标x = center[0] + (radius + 1) * np.cos(angle)y = center[1] + (radius + 1) * np.sin(angle)#三角函数中余弦正弦points.append((int(x), int(y)))# 创建一个空白图像img = np.zeros((512, 512, 3), np.uint8)img[:]=255cv.namedWindow('Image')for point in points:cv.circle(img, point, 3, (225, 10, 10), -1)cv.imshow('Image', img)cv.waitKey(100)  # 显示 500 毫秒for i in range(len(points)):for j in range(i + 1, len(points)):cv.line(img, points[i], points[j], (220, 110, 0), 1)#BGRcv.imshow('Image', img)cv.waitKey(100)  # 显示 500 毫秒cv.waitKey(0)cv.destroyAllWindows()if __name__ == "__main__":main()

小小心得

在学这个操作的时候,我就感觉到现在所学的图像处理,就是对早就接触过的美图软件进行一次理性、专业的解剖哈哈,这里的图片加法和混合就像图片叠加,之前的图像特定颜色通道选取就是低级一点的滤镜。

当然图像处理的核心就是满足人的需求,而人的需求也是推进技术学习,技术进步的一大动力

                                                    ——解锁2025年关键词《相信》

                                                      我相信:念念不忘,必有回响

http://www.lryc.cn/news/526111.html

相关文章:

  • python生成图片和pdf,快速
  • 剑指Offer|LCR 044.在每个树行中找最大值
  • PWM信号概述
  • 关于BAR(PCIE BAR或AXI BAR)的解释
  • 计算机的错误计算(二百二十一)
  • 【力扣Hot 100】矩阵1
  • 移动端VR处理器和传统显卡的不同
  • 「 机器人 」利用数据驱动模型替代仿真器:加速策略训练并降低硬件依赖
  • MATLAB 如何避免复杂shp文件对inpolygon的影响
  • 【2024年华为OD机试】 (C卷,200分)- 贪吃的猴子(JavaScriptJava PythonC/C++)
  • PostgreSQL中级专家是什么意思?
  • 从根源分析,调试,定位和解决MacOS ld: unsupported tapi file type ‘!tapi-tbd‘ in YAML file
  • 【Uniapp-Vue3】previewImage图片预览
  • doris:Insert Into Values
  • 15 分布式锁和分布式session
  • 迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-添加内核编译
  • C语言练习(23)
  • LabVIEW 太阳能光伏发电系统智能监控
  • 大唐杯赛道一国一备赛思路
  • 用户中心项目教程(五)---MyBatis-Plus完成后端初始化+测试方法
  • 深圳市云盟智慧科技有限公司智慧停车管理系统 SQL注入漏洞复现(附脚本)
  • PySide(PyQT)进行SQLite数据库编辑和前端展示的基本操作
  • 利用 SAM2 模型探测卫星图像中的农田边界
  • 前端路由的hash模式和history模式
  • 日志收集Day005
  • 代码随想录 二叉树 test 2
  • 浏览器默认语言与页面访问统计问题二三则
  • 用Python绘制一只懒羊羊
  • 虹科分享 | 汽车NVH小课堂之听音辨故障
  • 论文速读|SigLIP:Sigmoid Loss for Language Image Pre-Training.ICCV23