opencv笔记 - 使用numpy访问像素
  xWYnr39PTA9E 2023年11月24日 22 0

1.读取像素

导库(numpy)

pip install numpy
import numpy

读取像素

返回值 = 图像.item(位置参数)
返回值 = 图像.item(行,列)
'''
前面说过:
    灰度图像,返回灰度值。
    BGR图像,返回值为B,G,R的值。
'''
'''
灰度图像:
	p = img.item(88,192)
	print(p)
	也可以不用赋值,直接输出。 
'''
'''
BRG图像:(B,G,R值)
	0通道是蓝色,1通道是绿色,2通道是红色。
	blue  = img.item(78,125,0)
	green = img.item(78.125.1)
	red   = img.item(78.125.2)
	print...
	
	直接返回一个列表,存储的是三个通道的值。(合并在一起了)
	list = img.item(78.125)
'''

读取灰度图像像素

'''
灰度图像:
	p = img.item(88,192)
	print(p)
	也可以不用赋值,直接输出。 
'''

读取BGR图像像素

'''
BRG图像:(B,G,R值)
	0通道是蓝色,1通道是绿色,2通道是红色。
	blue  = img.item(78,125,0)
	green = img.item(78.125.1)
	red   = img.item(78.125.2)
	print...
'''
'''
	直接返回一个列表,存储的是三个通道的值。(合并在一起了)
	list = img.item(78.125)
'''

2.修改像素值

语法

图像名.itemset(位置,新值)
# 通过itemset来设置某一个位置上的新值。

灰度图像

img.itemset((88,99),255)

将88行99列的值赋值为255也就是白。忘记了。

import numpy
import cv2

img = cv2.imread(r'opencv\image\image_demo.jpg',0)
cv2.imshow("image_su",img)

img[88:108,99:109] = 255
print(img.itemset((88,200),255))
# print(img.itemset((88:108,99:109),255))
cv2.imshow("demo_su",img)

cv2.waitKey(0)
cv2.destroyAllWindows()

opencv笔记 - 使用numpy访问像素_numpy

opencv笔记 - 使用numpy访问像素_numpy_02

这里的使用了灰度图像显示。

opencv笔记 - 使用numpy访问像素_赋值_03

opencv笔记 - 使用numpy访问像素_opencv_04

import numpy as np
import cv2
img = cv2.imread(r'opencv\image\image_demo.jpg',0)
print('100-100的值为:',img.item(100,100))
img[88:108,99:109] = 255 # 100-100的值为: 0
print(img.item(88,200))
img.itemset((88,200),255)
print(img.item(88,200))
cv2.imshow("demo_su",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

BGR图像

img.itemset((88,99,0),255)
img.itemset((88,99,1),255)
img.itemset((88,99,2),255)

print(img.item(88,99,0))
print(img.item(88,99,1))
print(img.item(88,99,2))

使用itemset修改88,99的三个通道的值,将这个像素的值修改为白色。

使用itemset修改100,100的蓝色通道修改为255白色。

import numpy as np
import cv2
img = cv2.imread(r'opencv\image\image_demo.jpg',cv2.IMREAD_UNCHANGED)

print(img.item(100,100,0))
img.itemset((100,100,0),255)
print(img.item(100,100,0))

cv2.imshow("demo_su",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

opencv笔记 - 使用numpy访问像素_numpy_05

opencv笔记 - 使用numpy访问像素_赋值_06


总结

挺抽象的。还是直接img[88,99]更习惯点。而且这什么numpy啊?那里有使用numpy了?请问?

学习连接

网址:https://www.bilibili.com/video/BV1De411R77P?p=5&vd_source=441ed12ec48d03afe294e7c5f663a0d3

问题一:

opencv笔记 - 使用numpy访问像素_读取图像_07

'''
img = cv2.imread(r'opencv\image\image_demo.jpg',cv2.IMREAD_UNCHANGED)
这里的cv2.IMREAD_UNCHANGED是什么意思
'''
'''
cv2.IMREAD_UNCHANGED 是 OpenCV 中的一个标志,用于读取图像时保留原始图像的通道信息。

在默认情况下,使用 cv2.imread() 函数读取图像时,会将图像转换为灰度图像(如果图像是彩色的)。而使用 cv2.IMREAD_UNCHANGED 标志,可以保持图像的原始通道信息,即保留图像的颜色通道(如红色、绿色和蓝色通道)以及可能的透明度通道(如 alpha 通道)。

通过将第二个参数设置为 cv2.IMREAD_UNCHANGED,可以保留图像的原始通道信息。
'''

cv2.IMREAD_UNCHANGED,可以保留图像的原始通道信息。


问题二:

opencv笔记 - 使用numpy访问像素_灰度图像_08

import numpy as np
import cv2
img = cv2.imread(r'opencv\image\image_demo.jpg',0)

print(img.item(100,100,0))
img.itemset((100,100,0),255)
print(img.item(100,100,0))

cv2.imshow("demo_su",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

报错:

Traceback (most recent call last):
  File "C:\Users\Desktop\Python画图\opencv\学习-使用numpy访问像素.py", line 5, in <module>
    print(img.item(100,100,0))
ValueError: incorrect number of indices for array

说是item传入的参数不对。

然后我才发现和上面的问题是一个东西。

就是使用的图像模式不一样(灰度图像和BGR图像读取模式)。

可以看到上面的read函数中我传入的第二个参数是0,得知是灰度模式,没有传入cv2.IMREAD_UNCHANGED。

所以这里的item函数应该只用传入两个位置参数即可,也就是行和列。

如果是read函数中第二个参数传入了1的话,item函数就要传入三个位置参数,也就是行和列和通道号。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月24日 0

暂无评论

推荐阅读
  UYSNSBVoGd8R   2023年12月06日   19   0   0 关闭窗口OpenCV读取图像
  QtpjMRSUUfXb   2023年11月19日   25   0   0 赋值Python
xWYnr39PTA9E
最新推荐 更多