OpenCV 核心操作

图像的基础操作

获取并修改像素值

import cv2
img1 = cv2.imread("voice.PNG")
cv2.imshow("M1X1M1YA",img1)
#查看宽100 高100像素值的数值
print(img1[100,100])
print("BGR",img1[100,100])
#查看宽100 高100像素值的 第0通道的数值(B)
print("B通道:",img1[100,100,0])
#更改像素值的数值
img1[100,100] = [0,0,0]
#更改某个通道的像素值数值
img1[100,100,0] = 255
#查看更改后的数值
print("更改后",img1[100,100]) 
cv2.waitKey(0)

效果如下:
查看像素值
Numpy 是经过优化了的进行快速矩阵运算的软件包。所以我们不推荐逐个获取像素值并修改,这样会很慢,能有矩阵运算就不要用循环。因为使用Numpy的array.item()和array.itemset()方法可以更高效地访问和修改像素值,因为它们直接操作数组元素而不是访问像素对象的属性。同时,它们也可以用于处理多通道图像,例如在BGR颜色空间中,可以通过索引来访问和修改B、G、R通道的像素值。
但是,array.item()和array.itemset()方法的返回值是标量,不能直接返回多通道图像的所有像素值。因此,在处理多通道图像时,需要使用这些方法来分离每个通道的像素值,即在BGR颜色空间中,需要分别使用array.item(i,j,0)、array.item(i,j,1)、array.item(i,j,2)来获取像素的B、G、R通道的值。
下面代码展示之间的差别:

import cv2
import time

img1 = cv2.imread("voice.PNG")

w = img1.shape[0]
h = img1.shape[1]

start_time = time.time()

for i in range(w):
    for ii in range(h):
        img1[i,ii,0] = 0
end_time = time.time()
print("img[]:", end_time - start_time)

start_time = time.time()
for i in range(w):
    for ii in range(h):
        img1.itemset((i, ii, 0), 255)
end_time = time.time()

print("img.itemset:",end_time - start_time)
cv2.imshow("M1X1M1YA",img1)
cv2.waitKey(0)

在这里插入图片描述

获取图片属性

import cv2
import numpy as np
import time
#尝试使用uint16的格式读取
img1 = cv2.imread("voice.PNG")

print("BGR的属性:",img1.shape,"大小:",img1.size,"位深度",img1.dtype,"100,100的",img1[100,100])
img2 = cv2.imread("voice.PNG",
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值