机器学习:opencv图像识别--图片专项

2024-08-24 02:28

本文主要是介绍机器学习:opencv图像识别--图片专项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、读取图片

1.安装opencv库

2.读取彩色图片

3.读取灰度图

二、RGB

1.RGB的概念

2.颜色通道:

3.图像表示

4.代码实现单通道图像

三、ROI

1.代码实现

四、图片打码

五、图片组合

六、图片缩放

总结


前言

        OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,用于图像处理、视频分析、机器学习等任务。它提供了大量的函数和工具,帮助开发者进行图像处理和计算机视觉应用。

 

一、读取图片

1.安装opencv库

最好安装3.4及之前的版本,新版本可能会有版权问题

 

2.读取彩色图片

代码:

import cv2"--------------------读取图片-------------------"
a = cv2.imread('suda.jpg')
cv2.imshow('suda', a)  # 显示图片 第一个参数,给显示框命名
b = cv2.waitKey(0)    # 显示时间 单位毫秒  0一直显示 键盘任意按键结束 返回按键的ascll码值
print(b)
cv2.destroyAllWindows()   # 关闭所有窗口print("图片的形状", a.shape)
print("图像数据类型", a.dtype)
print("图像大小", a.size)

输出:

图片的形状 (940, 940, 3)
图像数据类型 uint8
图像大小 2650800

 

3.读取灰度图

代码:

import cv2"--------------------读取灰度图------------------"
a = cv2.imread('suda.jpg', cv2.IMREAD_GRAYSCALE)  # 读取的时候转换成灰度图进行读取 IMREAD可以用0替换
# img = cv2.imread('suda.jpg')
# a = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('suda', a)  # 显示图片 第一个参数,给显示框命名
b = cv2.waitKey(0)  # 显示时间 单位毫秒  0一直显示 键盘任意按键结束 返回按键的ascll码值
print(b)
cv2.destroyAllWindows()  # 关闭所有窗口print("图片的形状", a.shape)
print("图像数据类型", a.dtype)
print("图像大小", a.size)'''保存图片'''
cv2.imwrite('suda_GRAY.jpg', a)

输出:

  • 可以看到图片的形状变成了一维
  • 图像大小变成了彩色图片的三分之一
图片的形状 (940, 940)
图像数据类型 uint8
图像大小 883600

 

二、RGB

1.RGB的概念

        RGB 是一种颜色表示模型,用于图像和视频处理中。RGB 代表红色(Red)、绿色(Green)和蓝色(Blue)三个颜色通道,通过调整这三种颜色的强度来生成其他颜色。每种颜色通道的强度通常用一个整数值表示,范围从0到255。

 

2.颜色通道

  • 红色通道(R):控制红色的强度。
  • 绿色通道(G):控制绿色的强度。
  • 蓝色通道(B):控制蓝色的强度。

 

3.图像表示

  • 在数字图像处理中,每个像素的颜色通常由三个数值表示,这三个数值分别对应于红色、绿色和蓝色通道的强度。
  • 例如,一个像素的颜色为(128,64,32)表示红色强度为128,绿色强度为64,蓝色强度为32。

 

4.代码实现单通道图像

  • 为什么这样读取单色通道,因为每个图像是由三张不同的单色通道的图叠加而成的
  • 直接显示单色通道图会呈现类似灰度图的样子,因为此时默认另外两个通道的值为255,会有很大影响
  • 当把另外两个通道的值变成0时,即可输出正常的单色图像
  • 最后还有使用cv2.merge()函数实现多通道合并
import cv2# 读取图像
a = cv2.imread('suda.jpg')# 提取颜色通道
# b = a[:, :, 0]  # 蓝色通道
# g = a[:, :, 1]  # 绿色
# r = a[:, :,2]  # 红色
# 分离通道
b, g, r = cv2.split(a)# 显示单通道的图像  灰度
cv2.imshow('result', b)  # 显示为灰度图的样子 因为取单通道时其他通道默认值为255 调成0才显示单颜色
cv2.waitKey(10000)
cv2.destroyAllWindows()# 显示单通道图像  单色
a_new = a.copy()
a_new[:, :, 1] = 0  # 将绿色通道设置为0
a_new[:, :, 2] = 0  # 将红色通道设置为0
cv2.imshow('result', a_new)  # 显示为单色
cv2.waitKey(10000)
cv2.destroyAllWindows()'''合并颜色通道'''
img = cv2.merge((b, g, r))  # 图片通道数只能是1,3,4
cv2.imshow('result', img)  # 显示为单色
cv2.waitKey(10000)
cv2.destroyAllWindows()
  • 未将另外两个通道的值设置为0时,默认255的效果:

  • 将另外两个通道的值设置为0时的效果:

  • 合并颜色通道的效果:

 

 

三、ROI

        "ROI" 在图像处理中代表“感兴趣区域”(Region of Interest)。它是图像中的一个特定区域,人为取出图像中的某个区域。

1.代码实现

  • 代码很简单
  • 实质是取图片数组中的某个部分,形成新的显示
import cv2a = cv2.imread("suda.jpg")
b = a[100:600, 100:600]
cv2.imshow('pic', a)
cv2.imshow('sec', b)
cv2.waitKey(10000)
cv2.destroyAllWindows()

 

四、图片打码

  • 实质是用随机像素组成的矩阵替换图片中某一块矩阵的像素
import cv2
import numpy as np# 图片打码
a = cv2.imread('suda.jpg')
a[100:200, 200:300] = np.random.randint(0, 256, (100, 100, 3))
"""
两边矩阵大小须一致
np.random.randint(0, 256, (100, 100, 3)) 生成一个形状为 (100, 100, 3) 的随机整数数组
这些随机整数在 [0, 256) 范围内(即从0到255),通常用于表示RGB图像的像素值
(100, 100, 3) 表示生成一个100行100列的像素区域,每个像素有三个通道(R、G、B)
"""
cv2.imshow('pic', a)
cv2.waitKey(10000)
cv2.destroyAllWindows()

输出:

 

五、图片组合

  • 本质是用一张图片的某一部分取替换另一张图片的某一部分
# 图片组合
a = cv2.imread('suda.jpg')
b = cv2.imread('figure_0_9.png')
a[200:300, 300:500] = b[300:400, 500:700]  # 将a的一部分替换为b的一部分 两边矩阵大小须一致
cv2.imshow('pic', a)
cv2.imshow('sec', b)
cv2.waitKey(10000)
cv2.destroyAllWindows()

输出:

 

六、图片缩放

  • 有两种方法:
    • 一种是直接设定新图片的宽高
    • 另一种是使用resize设定新图片与原图片的比例
# 图片缩放
""" 
cv2.resize
src:要调整大小的输入图像,可以是numpy数组、PIL图像或其他类型
dsize:输出图像的大小,可以是一个元组,例如(宽,高),或者使用整数标量来缩放原始图像。如果dsize为None,则根据scalefx和scalefy缩放原始图像
fx:沿x轴的缩放倍数
fy:沿y轴的缩放倍数
"""
a = cv2.imread('suda.jpg')
a_new = cv2.resize(a, (200, 600))  # 设置宽、高
# a_new = cv2.resize(a, dsize=None, fx=0.5, fy=0.5)
print(a.shape)  # 高、宽、通道数
cv2.imshow('pic', a)
cv2.imshow('sec', a_new)
cv2.waitKey(10000)
cv2.destroyAllWindows()

输出:

  • 这是设置宽高

  • 这是设置比例

 

总结

        opencv库的功能十分强大,这只是其中一部分,后续还会介绍其他的功能

这篇关于机器学习:opencv图像识别--图片专项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101188

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个