1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python图像识别-Opencv02 二值图像 灰度图像以及彩色图像

Python图像识别-Opencv02 二值图像 灰度图像以及彩色图像

时间:2024-06-05 04:17:46

相关推荐

Python图像识别-Opencv02 二值图像 灰度图像以及彩色图像

上一篇开了一个头,这一篇我们继续

提醒一点:上一篇我们用 'import cv2.cv2 as cv',由于本地机器问题,cv2无法出现提示导致。为了一面引起读者的歧义,接下来的所有篇幅我直接 import cv2来进行说明。

二值图像及灰度图像

OpenCv最小的数据类型时无符号的8位二进制数,其最小值是0,最大值是255.因此,OpenCv中没有仅用一位二进制数表示二值图像的一个像素值(0或1)的数据类型。它使用0位二进制数最小值0表示二值图像的黑色,使用8位二进制数的最大值255表示二值图像中的白色。因此,可以将二值图像理解为是一个特殊的灰度图像,像素仅有最大值255和最小值0.

我们来尝试用Numpy模拟一个80*80的全黑图像

import cv2import numpy as npimg = np.zeros((80,80),dtype = np.uint8)print('img:\n',img)cv2.imshow('black_picture',img)cv2.waitKey()

首先看img的数组内容:

再看imshow的窗口内容

此时我们改变img数组中的部分数值,从0(黑色)变成255(白色):

img[5:15,5:15] = 255cv2.imshow('black_picture2',img)cv2.waitKey()

此时弹出来了改变后的图

可以看出,第5~15行,5~15列交界处变成了一个白色的方块。

彩色图像

Opencv在处理RGB模式的彩色图像时,会按照行方向分别读取该RGB图像像素点的B通道,G通道,R通道的像素值,并将像素值以行为单位储存在ndarray的列中。例如,有一副大小为R行*C列的原始BGR模式的三位数组形式存储,可以使用表达式访问数组内的值

例:使用img[0,0,0]访问img图像B通道内第0行第0列上的像素点。其中:

第一个索引表示第0行

第二个索引表示第0列

第三个索引表示第0个颜色通道。

综上所述,如果有一副红色图像,则img[0,0] = [0,0,255];img[0,0,1] = 0

让我们接下来做一个实例:

import cv2img = cv2.imread('D:/PixC/1.jpg')print('img[0,0] = ',img[0,0])print('img[0,0,0] = ',img[0,0,0])print('img[0,0,1] = ',img[0,0,1])print('img[0,50] = ',img[0,50])

得到这样的结果

img[0,0] = [90 51 42]

img[0,0,0] = 90

img[0,0,1] = 51

img[0,50] = [90 51 42]

可以看到,每个点的值以及每一个像素通道的值。于是我们再尝试着画图

img[0:10,0:50] = [0,0,255] #Rimg[10:20,0:50] = [0,255,0] #Gimg[20:30,0:50] = [255,0,0] #Bimg[30:40,0:50] = [0,255,255] #R&Gimg[40:50,0:50] = [255,255,0] #G&Bimg[50:60,0:50] = [255,255,255] #R&Gcv2.imshow('another',img)cv2.waitKey()

接着我们就得到了这样一张图

顺便复习了一下三原色以及叠加后会变成什么颜色

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。