我在Vscode学OpenCV 处理图像

这篇具有很好参考价值的文章主要介绍了我在Vscode学OpenCV 处理图像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

既然我们是面向Python的OpenCV(OpenCV for Python)那我们就必须要熟悉Numpy这个库,尤其是其中的数组的库,Python是没有数组的,唯有借助他库才有所实现想要的目的。

# 老三样库--事先导入
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

二、图像的认识

2.1图像的表示

2.1.1 单通道__二值图像

二值图像是指仅仅包含黑色和白色两种颜色的图像。

白色像素点(白色小方块区域)处理为“1”,将黑色像素点(黑色小方块区域)处理为“0”,以方便进行后续的存储和处理等操作

例如:二维码和条形码就是简单的二值
我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

2.1.2 单通道__灰度图像

二值图像表示起来简单方便,但是因为其仅有黑白两种颜色,所表示的图像不够细腻。如果想要表现更多的细节,就需要使用更多的颜色。能够表示的信息更多了

 256 个灰度级,用数值区间[0, 255]来表示,中,
 数值“255”表示纯白色,数值“0”表示纯黑色.
# 处理图像
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

img =np.zeros((256,256,3),np.uint8)
plt.imshow(img[:,:,::-1])

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

随机抓取一点看:
x=np.random.randint(0,256)
y=np.random.randint(0,256)
img[x,y],x,y

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide
再次随机

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

2.1.3 多通道__RGB彩色图像

自然界:红色、绿色和蓝色,即三基色(按照一定的比例混合构成。)
要区别于美术中的三原色:红黄蓝

色彩空间:
从光学角度出发可以将颜色解析为主波长,纯度,明度等,
从心理学角度和视觉角度出发可以将颜色解析为色调,饱和度,亮度等,我们将这些采用不同方式表达颜色的模式称为色彩空间。

RGB三个通道,每个通道取值[0,255]之间,组合表示颜色。共可以调配出所有常见的 256×256×256=16,777,216种颜色。

RGB=(R*65536)+(G*256)+B
我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

以#FFF为例子

#FFF是#FFFFFF的简称
我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide
其他颜色
我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

区别于OpenCV的通道

在RGB的色彩空间之中是以R,G,B的顺序存储的,然而在OpenCV中的通道是B,G,R
即:在处理图像的时候,需要对指定的图像通道顺序进行转换。除此以外,还可以根据需要对不同色彩空间的图像进行类型转换(灰度图像处理为二值图像,将彩色图像处理灰度图)

比方说,扫描二维码的时候,我们需要01的黑白画面就可以,不需要[0,255]的复杂

2.2 逐点处理(逐像素)并操作

像素的一格一格的小点来描述图像,现在有numpy和matplotlib.pyplot就相当于在二位的直角坐标系中的第二象限,就能够通过索引的形式对我们设定的图像或者导入的图像进行操作,访问。
我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

img[1,1]=(0,0,255)
plt.imshow(img[:,:,::-1])

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

2.2.1 灰度图像

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

首先使用 Numpy 库来生成一个 n×m 大小的数组,用来模拟一个黑色图像.

使用 Numpy 库中的函数 zeros()可以生成一个元素值都是 0 的数组
img=np.zeros((n,m),dtype=np.uint8

二维数组与图像之间存在对应关系。
我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

(1)如何证明plt和cv2的的灰度图是一样的

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图像
img = cv2.imread("./Pic/f2e919585490afd1bebd313257e7ad9.jpg", 0)

# # 使用cv2.imwrite将OpenCV数组图像保存为图像文件
# cv2.imwrite('./Pic/f2e919585490afd1bebd313257e7ad9.jpg', img)

# 如果你想要读取并显示保存后的图像,可以执行以下代码
saved_img = cv2.imread('./Pic/f2e919585490afd1bebd313257e7ad9.jpg', 0)
plt.imshow(saved_img, cmap='gray')
plt.title('Saved Image')
print(img==saved_img)

(2)避免错误:TypeError: unsupported operand type(s) for -: 'AxesImage' and 'int'

即:不可直接比较,需要将周图像的信息转换为数组的形式,一一对比。[轴图像无法和numpy数组]
我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

轴图像转换为数组形式plt.imread或plt.imsave
import matplotlib.pyplot as plt

# 读取Matplotlib图像并将其转换为数组
image_plt = plt.imread('your_image_path.jpg')

# 现在,image_plt是一个包含图像像素数据的NumPy数组
# 你可以对它进行处理或进行其他操作

或者,如果你要保存Matplotlib图像到文件中,你可以使用plt.imsave函数:

import matplotlib.pyplot as plt

# 创建一个示例图像(这是一个例子,你可以替换它为你自己的图像数据)
image_data = ...  # 这里应该是一个NumPy数组

# 使用plt.imsave保存NumPy数组为图像文件
plt.imsave('output_image.jpg', image_data)

通过这两种方法,你可以在Matplotlib图像和NumPy数组之间进行相互转换。注意,如果你使用了一些Matplotlib特定的绘图函数来创建图像,你可以使用plt.gcf()获取当前的图形对象,然后使用savefig方法将其保存为图像文件。

(3)plt就显示是正常的颜色。参数 cmap

在使用 Matplotlib 绘制图像时,可以使用不同的 colormap(颜色映射)来表示单通道图像,例如使用 cmap=‘gray’ 来显示灰度图像。对于四通道的图像,Matplotlib 也可以正确地显示透明度(Alpha)通道。

这是由于plt的映射到在灰度图像中,你只有一个通道,表示亮度值,但你可以使用不同的 Colormap 来表示这些亮度值。

cool 包含青绿色和品红色的阴影色。从青绿色平滑变化到品红色。
gray 返回线性灰度色图。
bone 具有较高的蓝色成分的灰度色图。该色图用于对灰度图添加电子的视图。

opencv是BGR通道,plt默认RGB通道,若使用cv2.imread()读入图像,用plt.imshow()展示原始图像或者展示对读入图像进行一系列操作后的图像时,需要进行通道转换。

显示灰度图像:

import matplotlib.pyplot as plt
import cv2

# 读取灰度图像
gray_image = cv2.imread('gray_image.png', cv2.IMREAD_GRAYSCALE)

# 显示灰度图像
plt.imshow(gray_image, cmap='gray')
plt.show()

显示四通道图像(RGBA):

import matplotlib.pyplot as plt
import cv2

# 读取四通道图像
rgba_image = cv2.imread('rgba_image.png', cv2.IMREAD_UNCHANGED)

# 显示四通道图像,包括透明度通道
plt.imshow(rgba_image)
plt.show()

cmap 是 Matplotlib 中的参数,用于指定颜色映射(Colormap),它决定了如何将数据值映射到颜色。Colormap 是一种颜色表,可以将数值数据映射到对应的颜色。它在绘制单通道图像或图表时非常有用,以帮助可视化数据。

Colormap 并不是通道的意思,而是指定如何将单一通道的数值映射到颜色的规则。在灰度图像中,你只有一个通道,表示亮度值,但你可以使用不同的 Colormap 来表示这些亮度值。

Matplotlib 提供了多种内置的 Colormap,一些常见的包括:

  1. 'viridis':从紫色到黄绿色的颜色映射,用于表示数据值的连续变化。
  2. 'jet':经典的彩虹颜色映射。
  3. 'gray':灰度颜色映射,用于表示单通道图像,将较暗的值映射为黑色,较亮的值映射为白色。
  4. 'copper':铜色颜色映射,常用于表示表面温度。

你可以在 Matplotlib 中使用 cmap 参数来指定所使用的颜色映射。例如:

import matplotlib.pyplot as plt
import numpy as np

# 创建一个示例的单通道数据
data = np.random.random((10, 10))

# 使用'viridis' Colormap来绘制数据
plt.imshow(data, cmap='viridis')
plt.colorbar()  # 显示颜色条
plt.show()

这将使用 ‘viridis’ Colormap 来表示数据中不同值的颜色。你可以根据你的需求选择合适的 Colormap 来更好地可视化你的数据。不同的 Colormap 可以传达不同的信息和情感。

(4)避免少cmap的参数出现的问题
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=np.ones((200,800,3),dtype=np.uint8)
img[:] = 255

cv2.imshow("this",img)
plt.imshow(img, cmap='gray')
cv2.waitKey(0)

cv2.destroyAllWindows()
img

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

(5)修改像素点

函数 item()能够更加高效地访问图像的像素点,该函数的语法格式为:
item(行,列)
函数 itemset()可以用来修改像素值,其语法格式为:
itemset(索引值,新值

import numpy as np
img=np.random.randint(10,99,size=[5,5],dtype=np.uint8)
print("img=\n",img)
print("读取像素点 img.item(3,2)=",img.item(3,2))
img.itemset((3,2),255)
print("修改后 img=\n",img)
print("修改后像素点 img.item(3,2)=",img.item(3,2))

随机生成一张灰度图

img=np.random.randint(0,256,size=[256,256],dtype=np.uint8)
cv2.imshow("demo",img)
 cv2.waitKey() 
 cv2.destroyAllWindows()

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide**我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide
**

2.2.2 彩色图像

RGB 模式的彩色图像在读入 OpenCV 内进行处理时,会反向的读取图像像素BGR,并存储在ndarray中。其中的BGR为三维数组

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

import numpy as np
import cv2
#-----------蓝色通道值--------------
blue=np.zeros((300,300,3),dtype=np.uint8)
blue[:,:,0]=255
print("blue=\n",blue)
cv2.imshow("blue",blue)
#-----------绿色通道值--------------
green=np.zeros((300,300,3),dtype=np.uint8)
green[:,:,1]=255
print("green=\n",green)
cv2.imshow("green",green)
#-----------红色通道值--------------
red=np.zeros((300,300,3),dtype=np.uint8)
red[:,:,2]=255
print("red=\n",red)
cv2.imshow("red",red)
#-----------释放窗口--------------
cv2.waitKey()
cv2.destroyAllWindows()

修改像素点

函数 item()访问 RGB 模式图像的像素值时,其语法格式为:
item(行,列,通道)
函数 itemset()修改(设置)RGB 模式图像的像素值时,其语法格式为:
itemset(三元组索引值,新值)
需要注意,针对 RGB 图像的访问,必须同时指定行、列以及行列索引(通道),例如
img.item(a,b,c)。仅仅指定行和列是不可以的

import numpy as np
img=np.random.randint(10,99,size=[2,4,3],dtype=np.uint8)
print("img=\n",img)
print("读取像素点 img[1,2,0]=",img.item(1,2,0))
print("读取像素点 img[0,2,1]=",img.item(0,2,1))
print("读取像素点 img[1,0,2]=",img.item(1,0,2))
img.itemset((1,2,0),255)
img.itemset((0,2,1),255)
img.itemset((1,0,2),255)
print("修改后 img=\n",img)2 章 图像处理基础
27
print("修改后像素点 img[1,2,0]=",img.item(1,2,0))
print("修改后像素点 img[0,2,1]=",img.item(0,2,1))
print("修改后像素点 img[1,0,2]=",img.item(1,0,2))

生成一幅彩色图像,让其中的像素值均为随机数。 根据题目要求,编写代码如下: import cv2

import numpy as np
> img=np.random.randint(0,256,size=[256,256,3],dtype=np.uint8)
> cv2.imshow("demo",img)
> cv2.waitKey()
> cv2.destroyAllWindows()

2.2.3 感兴趣区域(ROI)【待处理】

ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。在Halcon、OpenCV、Matlab等机器视觉软件上常用到各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理。

import cv2
img-cv2.imread(图像名称)x=img[200:400,200:400]

从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域。
可以通过各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理。

2.3 图像的属性

图像的属性

属性— API
形状 img.shape
图像大小 img.size
数据类型 img.dtype

 shape:如果是彩色图像,则返回包含行数、列数、通道数的数组;如果是二值图像或者灰度图像,则仅返回行数和列数。通过该属性的返回值是否包含通道数,可以判断一幅图像是灰度图像(或二值图像)还是彩色图像。

 size:返回图像的像素数目。其值为“行×列×通道数”,灰度图像或者二值图像的通道数为 1。

 dtype:返回图像的数据类型

2.4 通道的操作

针对 OpenCV 内的 BGR
图像 img,如下语句分别从中提取了 B 通道、G 通道、R 通道。

b = img[ : , : , 0 ]
g = img[ : , : , 1 ]
r = img[ : , : , 2 ]

2.4.1 cv2.split()能够拆分图像的通道

b,g,r=cv2.split(img)
#通道拆分
b,g,r=cv.split(newimg)
拆分后就是单通道,需要灰度图

plt.imshow(b,cmap=plt.cm.gray)
我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide
我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

2.4.2 cv2.merge()可以实现图像通道的合并

newimg=cv2.merge([b,g,r])

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

2.5 色彩转变

2.5.1 色彩空间转换

gray=cv.cvtColor(newimg,cv.COLOR_BGR2GRAY)
# plt.imshow(gray)

要以灰度图显示

plt.imshow(gray,cmap=plt.cm.gray)

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide

转换为HSV
hsv=cv.cvtColor(newimg,cv.COLOR_BGR2HSV)
plt.imshow(hsv)

我在Vscode学OpenCV 处理图像,OpenCV,vscode,opencv,ide文章来源地址https://www.toymoban.com/news/detail-742095.html

到了这里,关于我在Vscode学OpenCV 处理图像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 我在Vscode学OpenCV 图像处理一(阈值处理、形态学操作【连通性,腐蚀和膨胀,开闭运算,礼帽和黑帽,内核】)

    例如,设定阈值为127,然后:  将图像内所有像素值大于 127 的像素点的值设为 255。  将图像内所有像素值小于或等于 127 的像素点的值设为 0。 cv2.threshold() 和 cv2.adaptiveThreshold() 是 OpenCV 中用于实现阈值处理的两个函数,它们之间有以下区别: 1.1.1. cv2.threshold(): 这个函数

    2024年02月05日
    浏览(60)
  • 我在Vscode学OpenCV 初步接触

    OpenCV是一个开源的计算机视觉库,可以处理图像和视频数据。它包含了超过2500个优化过的算法,用于对图像和视频进行处理,包括目标识别、面部识别、运动跟踪、立体视觉等。OpenCV支持多种编程语言,包括C++、Python、Java等,可以在Windows、Linux、Mac OS X、Android等多个平台上

    2024年02月08日
    浏览(41)
  • 我在Vscode学OpenCV 色彩空间转换

    即是颜色,一种人体视觉系统对光的反射的 不同波长 的感知的结果。人们又对不同的波长范围的电磁波定义可视光的“颜色”。 在日常生活、美术课中,通过把(红黄蓝)三种颜色成为”认为是能够混合得到其他所有颜色的颜料。 而对于光学,就把(红绿蓝 RGB )三基色【

    2024年02月05日
    浏览(44)
  • 我在Vscode学OpenCV 基本的加法运算

    链接:《我在Vscode学OpenCV 处理图像》 属性— API 形状 img.shape 图像大小 img.size 数据类型 img.dtype  shape:如果是彩色图像,则返回包含行数、列数、通道数的数组;如果是二值图像或者灰度图像,则仅返回行数和列数。通过该属性的返回值是否包含通道数,可以判断一幅图像

    2024年02月05日
    浏览(48)
  • 我在Vscode学OpenCV 几何变换(缩放、翻转、仿射变换、透视、重映射)

    几何变换指的是将一幅图像映射到另一幅图像内的操作。 cv2.warpAffine :使用仿射变换矩阵对图像进行变换,可以实现平移、缩放和旋转等操作。 cv2.warpPerspective :使用透视变换矩阵对图像进行透视变换,可以实现镜头校正、图像纠偏等操作。 cv2.getAffineTransform :计算仿射变换

    2024年02月05日
    浏览(66)
  • 解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题

    问题描述 :在VSCode中通过SSH连接服务器,使用cv2.imshow或plt.show()无法显示图像。 并且VScode与MobaXterm可以ssh到远程服务器 参数说明: 保持MobaXterm开启的状态下,在VSCode中运行xclock,会显示一个时钟。

    2024年02月14日
    浏览(42)
  • SSH通过VSCode远程访问服务器Opencv和matplotlib等无法直接显示图像问题

    需求描述: 在VSCode中通过SSH连接服务器,使用cv2.imshow或plt.show()无法显示图像。 解决思路如下: 1、首先查看与服务器之间的网络连接问题(百分之九十问题就是出在第一步骤,哈哈哈) 在本地端打开cmd,使用指令ping xxx.xxx.xxx.xxx,其中(xxx.xxx.xxx.xxx为服务器的IP地址) 在

    2024年02月15日
    浏览(42)
  • vscode搭建OpenCV环境(默认已经有了vscode)

    @[TOC](这里写目录标题) # 一.文件下载: ## 1.MinGW下载 ## 2.Cmake下载 ## 3.Opencv下载 # 二.配置环境变量: # 三.vscode 配置 ## 1、launch.json ## 2、c_ cpp_ properties json ## 3、tasks json # 四.测试 1.MinGW下载(MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net) 单独在一个盘里面新建一个文

    2024年02月06日
    浏览(44)
  • 在VSCode中使用Opencv

    本文描述在VSCode工具下使用Opencv的详细步骤 由于Opencv在官网中的发行版并不适用于VSCode,所以使用VSCode不能使用Opencv官网中的发行版。因此就有两个选择: 在其它网站上下载Opencv编译好的文件(本文不讲); 在官网下载源码并本地编译。 本地编译 本地编译需要MinGW,这个东

    2024年02月15日
    浏览(33)
  • windows vscode使用opencv

    1.windows vscode使用opencv 参考:https://blog.csdn.net/zhaiax672/article/details/88971248 https://zhuanlan.zhihu.com/p/402378383 https://blog.csdn.net/weixin_39488566/article/details/121297536 安装opencv 原料: 手 地球人使用的IO设备 MinGW编译器(8.1.0的版本) 编译好的build:https://gitee.com/kirigaya/opencv_built_by_gcc_on_-wi

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包