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()
这里的使用了灰度图像显示。
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()
总结
挺抽象的。还是直接img[88,99]更习惯点。而且这什么numpy啊?那里有使用numpy了?请问?
学习连接
网址:https:///video/BV1De411R77P?p=5&vd_source=441ed12ec48d03afe294e7c5f663a0d3
问题一:
'''
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,可以保留图像的原始通道信息。
问题二:
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函数就要传入三个位置参数,也就是行和列和通道号。