opencv+python入门之二(像素操作)

我们有时会对图像重某一个像素进行操作,一种方法是用opencv进行操作,另一种方法是用python中的numpy库进行操作。

首先要分享的是用opencv中的方法进行操作:

  1. 读取图片
  2. 获取某一点像素值
  3. 重新设置像素值

相关代码如下:

import cv2

img = cv2.imread('F:\python\work\cv_learn\lena.jpg',1)
pix = img[100,200,0]#获取(100,200)处B通道的像素值  注意img后是中括号
pix1 = img[100,200]#获取(100,200)处的像素值  注意img后是中括号
print(pix1,pix)
img[100:200,200:300] = 0 #将这一区域像素设置为0
cv2.imshow('result',img)#显示图像
cv2.waitKey(0)#保持图像

运行结果如下:可见Lena中我们设置的方形区域变黑。 打印窗口中先输出的list为BGR三个通道的像素值,当然也可以单独获取某一通道的像素值,如pix1那一行代码。

opencv+python入门之二(像素操作)_第1张图片

这里numpy的方法便不尽人意:实现步骤与opencv中差不多,代码如下:

import cv2
import numpy as np

img = cv2.imread('F:\python\work\cv_learn\lena.jpg',1)
p = img.item(100,200,0)
print(p)
img.itemset((100,200,0),0)
img.itemset((100,200,1),0)
img.itemset((100,200,2),0)
cv2.imshow('result',img)#显示图像
cv2.waitKey(0)#保持图像

总结:本人感觉不尽人意的地方时numpy方法必须指定某一通道值才可以进行访问,否则便会报错。例如读取彩色图时,如果没有指定某一通道,opencv中默认一次性返回三个通道的值,而numpy却会报错。此外要注意这两种方法有的是对tuple进行操作,有的是对list进行操作,这也是一点不同之处。

 

 

 

 

你可能感兴趣的:(opencv+python)