机器学习: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

相关文章

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性