pycharm+python学习笔记(2)——图像像素处理

1.读取像素
灰度图像直接返回灰度值,彩色图像则返回B、G、R三个分量。注意OpenCV读取图像是BGR存储显示,需要转换为RGB再进行图像处理。
灰度图像:返回值 = 图像(位置参数)
eg: test=img[88,42]
彩色图像:返回值 = 图像[位置元素, 0 | 1 | 2 ] 获取BGR三个通道像素

import cv2 as cv
img=cv.imread("D:/ptext/girl.jpg")
test=img[100,100]
print(test)
img[100,100]=[255,255,255] #会发现,[100,100]处出现一个白点像素
print(test)
blue=img[100,100,0]
print(blue)
green=img[100,100,1]
print(green)
red=img[100,100,2]
print(red)
cv.namedWindow("Image")
cv.imshow("Image", img)
cv.waitKey(0)
cv.destroyAllWindows()

输出的结果为:
[ 20 45 201]
[255 255 255]
255
255
255

2.修改像素
修改图像如果是灰度图像则直接赋值新像素即可,彩色图像依次给三个值赋值即可。
灰度图像:
img[88,142] = 255
彩色图像:方法一
img[88,142, 0] = 255
img[88,142, 1] = 255
img[88,142, 2] = 255
彩色图像:方法二
img[88,142] = [255, 255, 255]

下面将行100到200、列100到300的像素区域设置为白色

import cv2 as cv
img=cv.imread("D:/ptext/girl.jpg")#读取图片
#将行100到200、列100到300的像素区域设置为白色
img[100:200,100:300]=[255,255,255]
cv.namedWindow("Image")#显示图像
cv.imshow("Image", img)
cv.waitKey(0)
cv.destroyAllWindows()

结果如下图所示:
在这里插入图片描述
3.Numpy读取像素
返回值 = 图像.item(位置参数)

import cv2 as cv
img=cv.imread("D:/ptext/girl.jpg")#读取图片
blue=img.item(100,100,0)
green=img.item(100,100,1)
red=img.item(100,100,2)
print(blue)  #注意OpenCV读取的图像通道是BGR
print(green)
print(red)
cv.namedWindow("Image")#显示图像
cv.imshow("Image", img)
cv.waitKey(0)
cv.destroyAllWindows()

输出结果为:
20
45
201

4.Numpy修改像素
图像.itemset(位置, 新值)

import cv2 as cv
img=cv.imread("D:/ptext/girl.jpg")#读取图片
img.itemset((100,100,0),255)
img.itemset((100,100,1),255)
img.itemset((100,100,2),0)
blue=img.item(100,100,0)
green=img.item(100,100,1)
red=img.item(100,100,2)
print(blue)  #注意OpenCV读取的图像通道是BGR
print(green)
print(red)
cv.namedWindow("Image")#显示图像
cv.imshow("Image", img)
cv.waitKey(0)
cv.destroyAllWindows()

输出结果如下所示:
255
255
0

5.行列像素的读取
cv.GetCol(im, 0): 返回第一列的像素
cv GetCols(im, 0, 10): 返回前 10 列
cv.GetRow(im, 0): 返回第一行
cv.GetRows(im, 0, 10): 返回前 10 行
这个我在试验的时候发现:AttributeError: module ‘cv2.cv2’ has no attribute ‘GetCol’

6.批量处理——通过for循环迭代处理

import cv2 as cv
import random
img=cv.imread("D:/ptext/girl.jpg")#读取图片
sp=img.shape#图像矩阵的shape属性表示图像的大小,shape会返回tuple元组,第一个元素表示矩阵行数,第二个元组表示矩阵列数,第三个元素是3,表示像素值由光的三原色组成。
height=sp[0]
width=sp[1]
for i in range(height):
    for j in range(width):
        if i%2==0 and j%2==1:#假如我们把行是偶数列是奇数的像素随机取一个值
         img[i,j]=[random.randrange(256),random.randrange(256),random.randrange(256)]
cv.namedWindow("Image")#显示图像
cv.imshow("Image", img)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述
7.批量处理——通过LineIterator进行迭代处理
import cv2.cv as cv
im = cv.LoadImage(“img/lena.jpg”)
li = cv.InitLineIterator(im, (0, 0), (im.rows, im.cols)) #So loop the entire matrix
for (r, g, b) in li:
# 这里可以对每个像素点的 r g b 进行处理
这个我在试验时发现:AttributeError: module ‘cv2.cv2’ has no attribute ‘InitLineIterator’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值