ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基于numpy.array对图像的数据访问(一)

2022-01-02 11:04:45  阅读:217  来源: 互联网

标签:img cv2 jpg 010 数组 图像 array numpy


numpy.array类对数组的操作进行了极大的优化,它允许某些类型的批量操作,而这些操作在普通的python列表中是不可用的。这些类型的numpy.array都是opencv中特定于数组类型的操作,对于图像操作来说很方便。

import cv2

img = cv2.imread('010.jpg')
img[0,0] = [255,255,255]
cv2.imwrite('001.jpg',img)

上述图片是将坐标(0,0)的点转化为白色,不过这里笔者使用的图片本身不太明显也就没有加上

import cv2

img = cv2.imread('010.jpg')
img[: ,: ,1] = 0
cv2.imwrite("011.jpg",img)

这一块则是程序从所有行、列中获取所有像素,并把绿色值(在BGR数组的一个索引处)设置为0,通过下面的图片可以看到绿色已经完全消失了。 

 如果要修改某一特定像素的蓝色值,还可以使用item方法,它有三个参数:x(或者left)位置,y(或者top)位置以及数组中(x,y)位置的索引(在BGR图像中,某个特定位置处的数据是一个三元数组,包含按照BGR顺序排列的值),并返回索引位置的值。另一个方法itemset可以将某一特定像素的特定通道的值设置为指定的值。itemset有两个参数:三元组(x,y和索引)以及新值。

import cv2

img = cv2.imread('010.jpg')
img.itemset((200,340,0),255)
print(img.item((200,340,0)))
cv2.imwrite("011.jpg",img)

通过NumPy的数组切片操作,我们可以定义感兴趣区域(Region Of Interset,ROI),并对此区域进行一系列操作。

import cv2

img = cv2.imread('010.jpg')
my_roi = img[0:100,0:100]
img[300:400,300:400] = my_roi  #注意两个区域大小必须保持一致
cv2.imwrite("011.jpg",img)

效果如下:

 最后则是学习numpy.array的属性

import cv2

img = cv2.imread('010.jpg')
print(img.shape)
print(img.size)
print(img.dtype)

 三个属性定义如下:

  1. shape:描述数组形状的一个元组。对于图像,它(依次)包括高度、宽度、通道数(如果是彩色图像)。shape元组的长度是确定图像是灰度还是彩色的一种有用方法。对于灰度图像,len(shape)==2,对于彩色图像,len(shape)==3。
  2. size:数组中的元素数。对于灰度图像,这和像素数是一样的。对于BGR图像,他是像素数的3倍,因为每个像素都由3个元素(B、G和R)表示。
  3. dtype:数组元素的数据类型。对于每个通达8位的图像,数据类型是numpy.uint8.

标签:img,cv2,jpg,010,数组,图像,array,numpy
来源: https://blog.csdn.net/zhaodongdz/article/details/122273966

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有