【人工智能学习之图像操作(一)】

【人工智能学习之图像操作(一)】

  • 图像读写
  • 创建图片并保存
  • 视频读取
  • 色彩空间与转换
    • 色彩空间的转换
    • 通道分离
    • 理解HSV
      • 基本图形绘制
  • 阀值操作
    • OTSU二值化
    • 简单阀值
    • 自适应阀值

图像读写

图像的读取、显示与保存

import cv2
img = cv2.imread(r"1.jpg")
cv2.imshow("pic show", img)
cv2.waitKey(0)

cv2图像读取的返回值是一个numpy数据类型

print(type(img))
#out:<class 'numpy.ndarray'>

创建图片并保存

import numpy as np
import cv2
img = np.empty((200, 200, 3), np.uint8)
img[..., 0] = 255
img[..., 1] = 0
img[..., 2] = 0
cv2.imwrite("2.jpg", img)

打开保存的图片,我们发现图片是纯蓝色的,由此我们可以知道opencv读入的图片是BGR格式。

视频读取

读取视频或摄像头,并显示

import cv2
cap = cv2.VideoCapture(0)
#cap = cv2.VideoCapture("1.mp4")
while True:
	ret, frame = cap.read()
	cv2.imshow('frame', frame)
	if cv2.waitKey(1) & 0xFF == ord('q'):
		break
cap.release()
cv2.destroyAllWindows()

色彩空间与转换

色彩空间的转换

RGB/RGBA/GRAY/HSV/YUV

import cv2
src = cv2.imread(r"1.jpg")
dst = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
# dst = cv2.cvtColor(src, cv2.COLOR_BGR2YUV)
cv2.imshow("src show", src)
cv2.imshow("dst show", dst)
cv2.waitKey(0)

通道分离

import cv2
img = cv2.imread(r"1.jpg")
img[..., 0] = 0
img[..., 1] = 0
cv2.imshow("dst show", img)
cv2.waitKey(0)

理解HSV

HSV颜色空间
HSV 格式中,H(色彩/色度)的取值范围是 [0,179],S(饱和度)的取值范围 [0,255],V(亮
度)的取值范围 [0,255]。但是不同的软件使用的值可能不同。所以当你需要拿 OpenCV 的 HSV
值与其他软件的 HSV 值进行对比时,一定要记得归一化。
HSV中,我们按颜色提取变得会更加方便。
在这里插入图片描述

import cv2
import numpy as np
img = cv2.imread("3.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_blue = np.array([100, 200, 100])
upper_blue = np.array([200, 255, 200])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
res = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('frame', img)
cv2.imshow('mask', mask)
cv2.waitKey(0)
import cv2
import numpy as np
color=np.uint8([[[21,94,214]]])
hsv_color=cv2.cvtColor(color,cv2.COLOR_BGR2HSV)
print(hsv_color)

基本图形绘制

直线、圆、椭圆、矩形:

import cv2
img = cv2.imread(r"1.jpg")
# cv2.line(img, (100, 30), (210, 180), color=(0, 0, 255), thickness=2)
# cv2.circle(img, (50, 50), 30, (0, 0, 255), 1)
cv2.rectangle(img,(100,30),(210,180),color=(0,0,255),thickness=2)
# cv2.ellipse(img, (100, 100), (100, 50), 0, 0, 360, (255, 0, 0), -1)
cv2.imshow("pic show", img)
cv2.waitKey(0)

多边形:

import cv2
import numpy as np
img = cv2.imread(r"1.jpg")
# 定义四个顶点坐标
pts = np.array([[10, 5], [50, 10], [70, 20], [20, 30]], np.int32)
# 顶点个数:4,矩阵变成4*1*2维
pts = pts.reshape((-1, 1, 2))
cv2.polylines(img, [pts], True, (0, 0, 255), 2)
cv2.imshow("pic show", img)
cv2.waitKey(0)

文字:

import cv2
img = cv2.imread(r"1.jpg")
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'beautiful girl', (10, 30), font, 1, (0, 0, 255), 1,
lineType=cv2.LINE_AA)
cv2.imshow("pic show", img)cv2.waitKey(0)

阀值操作

OTSU二值化

import cv2
img = cv2.imread("1.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
cv2.imshow("gray",gray)
cv2.imshow('binary', binary)
cv2.waitKey(0)

简单阀值

与名字一样,这种方法非常简单。但像素值高于阈值时,我们给这个像素赋予一个新值(可能是白
色),否则我们给它赋予另外一种颜色(也许是黑色)。这个函数就是 cv2.threshhold()。这个函数的第一个参数就是原图像,原图像应该是灰度图。第二个参数就是用来对像素值进行分类的阈值。第三个参数就是当像素值高于(有时是小于)阈值时应该被赋予的新的像素值。OpenCV提供了多种不同的阈值方法,这是有第四个参数来决定的。这些方法包括:

  • cv2.THRESH_BINARY
  • cv2.THRESH_BINARY_INV
  • cv2.THRESH_TRUNC
  • cv2.THRESH_TOZERO
  • cv2.THRESH_TOZERO_INV
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('5.jpg',0)
ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret,thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret,thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
titles = ['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in range(6):
	plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
	plt.title(titles[i])
	plt.xticks([]),plt.yticks([])
plt.show()

在这里插入图片描述

自适应阀值

前面的部分我们使用是全局阈值,整幅图像采用同一个数作为阈值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应阈值。此时的阈值是根据图像上的每一个小区域计算与其对应的阈值。因此在同一幅图像上的不同区域采用的是不同的阈值,从而使我们能在亮度不同的情况下得到更好的结果。
这种方法需要我们指定三个参数,返回值只有一个。

  • Adaptive Method- 指定计算阈值的方法。
  • cv2.ADPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平均值
  • cv2.ADPTIVE_THRESH_GAUSSIAN_C:阈值取值相邻区域的加权和,权重为一个高斯窗口。
  • Block Size - 邻域大小(用来计算阈值的区域大小)。
  • C - 这就是是一个常数,阈值就等于的平均值或者加权平均值减去这个常数
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('4.jpg', 0)
img = cv2.GaussianBlur(img, (5, 5), 0)
ret, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
th3 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2)
titles = ['Original Image', 'Global Thresholding (v = 127)','Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
images = [img, th1, th2, th3]
for i in range(4):
	plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
	plt.title(titles[i])
	plt.xticks([]), plt.yticks([])
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI推迟ChatGPT高级语音模式发布!谷歌将推出明星网红AI聊天机器人|AI日报

文章推荐 时序预测双飞轮&#xff0c;全面超越Transformer&#xff0c;纯MLP模型实现性能效能齐飞 OpenAI将终止对我国提供API服务&#xff0c;国内大模型将迎来“六小强”格局&#xff01;&#xff5c;AI日报 推迟ChatGPT高级语音模式发布&#xff01;OpenAI将计划在秋季向…

主流先进封装技术介绍

主流先进封装技术介绍 先进封装是指封装集成电路 (IC) 以提高性能的多种创新技术。 本质上&#xff0c;就是将传统封装中被延缓的数据传输速度和被损耗的大量功耗&#xff0c;通过技术和结构的创新极大程度的找回。 1. FO 封装 FO封装包括三大类&#xff1a; 核心扇出型&a…

纯css写一个动态圣诞老人

效果预览 在这篇文章中&#xff0c;我们将学习如何使用CSS来创建一个生动的圣诞老人动画。通过CSS的魔力&#xff0c;我们可以让圣诞老人在网页上摇摆&#xff0c;仿佛在向我们招手庆祝圣诞节和新年。 实现思路 实现这个效果的关键在于CSS的keyframes动画规则以及各种CSS属性…

【Python机器学习】自动化特征选择——单变量统计

添加更多特征会使所有的模型变得更加复杂&#xff0c;从而增大过拟合的可能性。 在添加新特征或处理一般的高位数据集时&#xff0c;最好将特征的数量减少到只包含最有用的那些特征&#xff0c;并删除其余特征&#xff0c;这样会得到泛化能力更好、更简单的模型。 对于如何判…

何用Vue3和Plotly.js打造交互式3D图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 利用 Plotly.js 创建交互式动画图表 应用场景 本代码适用于需要创建交互式动画图表的数据可视化项目。例如&#xff0c;可以用来展示时间序列数据或比较不同函数的行为。 基本功能 该代码使用 Plotly.js 库…

shell编程之免交互(shell脚本)

Here Document 免交互 Here Document 概述 Here Document是一个特殊的用途的代码块。它在linux shell中使用I/O重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如ftp&#xff0c;cat或read命令。Here Document 是标准输入的一种替代品&#xff0c;可以帮助脚本开…

Vue项目打包优化

Vue项目打包优化 前言 在这篇文章我们讨论Vue项目打包优化&#xff0c;并按步骤展示实际优化过程中的修改和前后对比。 背景 刚开始的打包体积为48.71M 优化 步骤一&#xff1a;删除viser-vue viser-vue底层依赖antv/g2等库一并被删除&#xff0c;目前总体积为46.9M&am…

红酒邂逅时尚,品味生活的双重魅力,引领潮流新风尚

在繁华的都市中&#xff0c;红酒与时尚如同一对孪生姐妹&#xff0c;共同诠释着品味生活的双重魅力。红酒&#xff0c;那深邃的色泽中蕴藏着千年的历史与文化&#xff1b;时尚&#xff0c;那流转的光影中凝聚着时代的潮流与个性。当两者相遇&#xff0c;便碰撞出了特别的火花&a…

PMP培训,哪个机构的通过率高?

有很多培训机构供选择&#xff0c;但要找到适合自己的却很困难。特别是随着PMP参考教材的更新&#xff0c;考试难度增加了&#xff0c;仅靠自学很难与报班的同学竞争。那么在众多PMP培训机构中如何选择最适合自己的呢&#xff1f;有哪些机构是可信赖的呢&#xff1f;下面将介绍…

纯干货丨知乎广告投放流程和避坑攻略

精准有效的广告投放企业获客的关键&#xff0c;知乎作为中国最大的知识分享平台&#xff0c;拥有着高质量的用户群体和高度的用户粘性&#xff0c;为广告主提供了独一无二的品牌传播与产品推广平台。然而&#xff0c;如何在知乎上高效、精准地进行广告投放&#xff0c;避免不必…

【Proteus仿真】基于stm32的数码管时钟

【Proteus仿真】基于stm32的数码管时钟 Proteus仿真&#xff01;基于stm32的数码管时钟~_哔哩哔哩_bilibili ‍ 01原理图 ​​ 02功能描述 1.通过按键修改时间 2.数码管显示实时时间&#xff0c;时-分-秒-毫秒格式 03获取方式 https://docs.qq.com/sheet/DTExIc2dPUUJ…

【原创工具】孔夫子旧书网店铺图书采集工具1.0

目录 1 概述2 演示效果2.1 图文2.2视频3 核心逻辑3.1 导出数据4 附件下载5 使用方式1 概述 爬取孔夫子旧书网的店铺图书信息(条码、书名、售价、定价),支持导出和调速(默认速度5条/s)、支持识别该店铺最新上架图书和总计图书数量,采集结果和官网排序一致,可以对比测试 2…

error: RPC failed: HTTP 413 curl 22 The reguested URL returned error: 413

当你用sourcetree 提交代码 报错 RPC failed: HTTP 413 curl 22 The reguested URL returned error: 413 4731719459468_.pic.jpg 1、修改缓存区大小 git config --global http.postBuffer 524288000 2、如果是自己公司搭建的git &#xff0c;让人看看服务端有没有限制 3、尝试…

机器学习-数据预处理-聚类-回归-分类-单车数据集

机器学习-数据预处理-聚类-回归-分类-单车数据集 前言一、数据预处理1. 导入数据集2. 数据预处理3. 处理缺失值4. 生成特征用于后续进一步的分析 二、数据分布可视化1. 骑行时长分布2. 起始站和终点站分布可视化3. 高峰期与非高峰期骑行频次分布 三、聚类分析1. K-means聚类 四…

【绝对有用】yolo系列目标检测 核心技术点 汇总

YOLO (You Only Look Once) 是一种高效的目标检测算法&#xff0c;它以速度和精度著称。YOLO 的工作原理是将目标检测视为一个回归问题&#xff0c;直接从图像的像素空间预测目标的类别和位置。YOLO 目标检测头包括以下几个关键部分&#xff1a; 输入图像处理&#xff1a; YOLO…

原、反、补码之间的相互转换以及计算机硬件实现有符号数、无符号数、定点小数、定点整数的加减法运算

目录 原、反、补码之间的相互转换 无符号整数的加减运算 无符号整数的加法运算 无符号整数的减法运算 有符号整数的加减运算 有符号整数补码的加法运算 有符号整数补码的减法运算 定点小数的加减运算 定点小数补码的加法运算 定点小数补码的减法运算 定点小数VS定点整…

Advantest 93000测试机中CLOCK DOMAIN 详解

爱德万测试&#xff08;Advantest&#xff09;的V93000系列测试系统是一个高度模块化和可扩展的平台&#xff0c;专为复杂和高性能的半导体器件测试而设计&#xff0c;包括系统级芯片&#xff08;SoC&#xff09;、存储器、射频&#xff08;RF&#xff09;和混合信号器件等。在…

Apple Intelligence,我们能得到什么?(上)

苹果公司WWDC 2024发布会&#xff0c;苹果AI成为最吸睛的焦点。不过&#xff0c;苹果的AI不是大家口中的AI&#xff0c;而是苹果独有的概念&#xff1a;Apple Intelligence&#xff0c;苹果智能。 所谓Apple Intelligence&#xff0c;被定义为iPhone、iPad和Mac的个人智能系统…

Android U Settings 应用中 APN 菜单实现的代码逻辑

功能简介 MobileNetwork移动网络设置页面下有【接入点设置】(APN)。 问题:为什么Controller初始化找不到pref,然后报错。 Note:什么时候切换成Controller的呢?在Android T&U 上还没有更新成kt实现 ,但是已经有Controller的方案。 流程逻辑 1、界面“telephony_a…

Day35:2734. 执行字串操作后的字典序最小字符串

Leetcode 2734. 执行字串操作后的字典序最小字符串 给你一个仅由小写英文字母组成的字符串 s 。在一步操作中&#xff0c;你可以完成以下行为&#xff1a; 选择 s 的任一非空子字符串&#xff0c;可能是整个字符串&#xff0c;接着将字符串中的每一个字符替换为英文字母表中的前…