opencv_day02

#读取一幅彩色图像,并对其像素进行访问,修改
import numpy as np
import cv2
img=cv2.imread('./image/iu.jpeg',1)
cv2.imshow('before',img)
print('访问img[0,0]=',img[0,0])#输出第0行第0列的BGR的取值
print('访问img[0,0,0]=',img[0,0,0])#输出图片的第0行第0列的B通道的值
print('访问img[0,0,1]=',img[0,0,1])
print('访问img[0,0,2]=',img[0,0,2])
print('访问img[50,0]=',img[50,0])
print('访问img[100,0]=',img[100,0])
#区域1
for i in range(0,50):
    for j in range(0,100):
        for k in range(0,3):
            img[i,j,k]=255
#区域2
for i in range(50,100):
    for j in range(0,100):
        img[i,j]=[128,128,128]
#区域3
for i in range(100,150):
    for j in range(0,100):
        img[i,j]=0
cv2.imshow('after',img)
print('访问img[0,0]=',img[0,0])#输出第0行第0列的BGR的取值
print('访问img[0,0,0]=',img[0,0,0])#输出图片的第0行第0列的B通道的值
print('访问img[0,0,1]=',img[0,0,1])
print('访问img[0,0,2]=',img[0,0,2])
print('访问img[50,0]=',img[50,0])
print('访问img[100,0]=',img[100,0])
i=0
while i<4:
    i+=1
    cv2.waitKey()

cv2.destroyAllWindows()

输出:
访问img[0,0]= [235 217 200]
访问img[0,0,0]= 235
访问img[0,0,1]= 217
访问img[0,0,2]= 200
访问img[50,0]= [240 224 207]
访问img[100,0]= [242 230 218]
访问img[0,0]= [255 255 255]
访问img[0,0,0]= 255
访问img[0,0,1]= 255
访问img[0,0,2]= 255
访问img[50,0]= [128 128 128]
访问img[100,0]= [0 0 0]

opencv_day02_第1张图片

#使用numpy.array()访问像素
#numpy.array()提供了item()和itemset()来访问和修改函数
#使用numpy.array()比直接使用索引更快
#使用Numpy生成一个二维随机数组,用来模拟一幅灰度图像,并对其像素进行访问,修改
import numpy as np
img=np.random.randint(10,99,size=[5,5],dtype=np.uint8)
print('img=\n',img)
print('读取像素点img.item(3,2)=',img.item(3,2))
img.itemset((3,2),255)
print('修改后 img=\n',img)
print('修改后像素点img.item(3,2)=',img.item(3,2))

输出:
img=
[[71 43 44 83 23]
[74 39 77 49 92]
[17 16 58 21 83]
[42 18 80 62 31]
[48 67 25 14 52]]
读取像素点img.item(3,2)= 80
修改后 img=
[[ 71 43 44 83 23]
[ 74 39 77 49 92]
[ 17 16 58 21 83]
[ 42 18 255 62 31]
[ 48 67 25 14 52]]
修改后像素点img.item(3,2)= 255

#生成一个灰度图像,让其中的像素值均为随机数
import numpy as np
import cv2
img=np.random.randint(0,256,size=[256,256],dtype=np.uint8)
cv2.imshow('demo',img)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
opencv_day02_第2张图片

#读取一幅灰度图像,并对其像素值进行访问,修改
import cv2
img=cv2.imread('./image/test.jpg',0)
print(img)
#测试读取,修改单个像素值
print('读取像素点img.item(3,2)=',img.item(3,2))
img.itemset((3,2),255)
print('修改后像素点img.item(3,2)=',img.item(3,2))
#测试修改一个区域的像素值
cv2.imshow('before',img)
for i in range(10,100):
    for j in range(80,100):
        img.itemset((i,j),255)
cv2.imshow('after',img)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
opencv_day02_第3张图片

[[190 189 189 … 101 92 84]
[190 189 189 … 107 94 81]
[190 189 189 … 105 96 89]

[ 76 69 64 … 167 169 170]
[ 64 77 70 … 167 168 169]
[ 18 68 77 … 167 167 167]]
读取像素点img.item(3,2)= 189
修改后像素点img.item(3,2)= 255

#使用Numpy生成一个有=由随机数构成的三维数组,用来模拟一幅RGB色彩空间
#的彩色图像,并使用函数item()和itemset()来访问和修改它
import numpy as np
img=np.random.randint(10,99,size=[2,4,3],dtype=np.uint8)
print('img=\n',img)
print('读取像素点img[1,2,0]=',img.item(1,2,0))
print('读取像素点img[0,2,1]=',img.item(0,2,1))
print('读取像素点img[1,0,2]=',img.item(1,0,2))
img.itemset((1,2,0),255)
img.itemset((0,2,1),255)
img.itemset((1,0,2),255)
print('修改后img=\n',img)
print('修改后像素点img[1,2,0]=',img.item(1,2,0))
print('修改后像素点img[0,2,1]=',img.item(0,2,1))
print('修改后像素点img[1,0,2]=',img.item(1,0,2))

输出:
img=
[[[10 80 11]
[69 27 10]
[46 54 58]
[61 42 20]]

[[82 51 73]
[46 85 71]
[66 76 80]
[92 26 66]]]
读取像素点img[1,2,0]= 66
读取像素点img[0,2,1]= 54
读取像素点img[1,0,2]= 73
修改后img=
[[[ 10 80 11]
[ 69 27 10]
[ 46 255 58]
[ 61 42 20]]

[[ 82 51 255]
[ 46 85 71]
[255 76 80]
[ 92 26 66]]]
修改后像素点img[1,2,0]= 255
修改后像素点img[0,2,1]= 255
修改后像素点img[1,0,2]= 255

#生成一幅彩色图像,让其中的像素值均为随机数
import cv2
import numpy as np
img=np.random.randint(0,256,size=[256,256,3],dtype=np.uint8)
cv2.imshow('demo',img)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
opencv_day02_第4张图片

#读取一幅彩色图像,并对其像素进行访问,修改
import cv2
import numpy as np
img=cv2.imread('./image/iu.jpeg',1)
cv2.imshow('before',img)
print('访问前img[0,0,0]=',img.item(0,0,0))
print('访问前img[0,0,1]=',img.item(0,0,1))
print('访问前img[0,0,2]=',img.item(0,0,2))
for i in range(0,50):
    for j in range(0,100):
        for k in range(0,3):
            img.itemset((i,j,k),255)#白色
cv2.imshow('after',img)
print('修改后img[0,0,0]=',img.item(0,0,0))
print('修改后img[0,0,1]=',img.item(0,0,1))
print('修改后img[0,0,2]=',img.item(0,0,2))
cv2.waitKey()
cv2.destroyAllWindows()

输出:
opencv_day02_第5张图片
访问前img[0,0,0]= 235
访问前img[0,0,1]= 217
访问前img[0,0,2]= 200
修改后img[0,0,0]= 255
修改后img[0,0,1]= 255
修改后img[0,0,2]= 255

#感兴趣区域(ROI)
import cv2
a=cv2.imread('./image/iu.jpeg',-1)
face=a[220:400,150:350]
cv2.imshow("face",face)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
opencv_day02_第6张图片

#对图像中的人物的脸部进行打码
import cv2
import numpy as np
a=cv2.imread('./image/iu.jpeg',-1)
cv2.imshow('original',a)
#使用随机数生成的三维数组模拟了随机图像,实现打码
face=np.random.randint(0,256,(180,200,3))
print(face)
a[220:400,150:350]=face
cv2.imshow('result',a)
cv2.waitKey()
cv2.destroyAllWindows()

输出:

opencv_day02_第7张图片

#将一幅图像的ROI复制到另一幅图像内
import cv2
iu=cv2.imread('./image/iu.jpeg',-1)
ym=cv2.imread('./image/ym.jpeg',-1)
cv2.imshow('iu',iu)
cv2.imshow('ym',ym)
#找iu的脸
face=iu[200:450,150:300]
# ymf=ym[50:300,200:450]
#杨幂的脸
ym[50:300,300:450]=face
# cv2.imshow('ymf',ymf)
cv2.imshow('result',ym)
cv2.waitKey()
cv2.destroyAllWindows()

输出:

#演示图像通道拆分及通道值改变对彩色图像的影响
import cv2
iu=cv2.imread('./image/iu.jpeg',-1)
cv2.imshow('iu',iu)
#通过索引拆分通道
b=iu[:,:,0]#b通道
g=iu[:,:,1]#g通道
r=iu[:,:,2]#r通道
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
iu[:,:,0]=0#b通道全部设置为0
cv2.imshow('iu0',iu)
iu[:,:,1]=0#b,g通道全部设置为0
cv2.imshow('iu1',iu)
iu[:,:,2]=0
cv2.imshow('iu2',iu)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
opencv_day02_第8张图片

#通过函数拆分
#b,g,r=cv2.split(img)
#与b=cv2.split(a)[0]
#g=cv2.split(a)[1]
#r=cv2.split(a)[2]等价
import cv2
iu=cv2.imread('./image/iu.jpeg',-1)
b,g,r=cv2.split(iu)
cv2.imshow('B',b)
cv2.imshow('G',g)
cv2.imshow('R',r);cv2.waitKey()
cv2.destroyAllWindows()

输出:
opencv_day02_第9张图片

#演示使用函数cv2.merge()合并通道
import cv2
iu=cv2.imread('./image/iu.jpeg',-1)
b,g,r=cv2.split(iu)
bgr=cv2.merge([b,g,r])
rgb=cv2.merge([r,g,b])
cv2.imshow('iu',iu)
cv2.imshow('bgr',bgr)
cv2.imshow('rgb',rgb)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
opencv_day02_第10张图片

#观察图像的常用属性
import cv2
gray=cv2.imread('./image/test.jpg',0)
color=cv2.imread('./image/iu.jpeg',1)
print('图像gray的属性是: ')
#shape:彩色图像则返回行,列,通道的数组;二值或灰度图像返回行数和列数
#size:返回图像的像素数目.行*列*通道数,灰二的通道数是1
#dtype:返回图像的数据类型
print('gray.shape=',gray.shape)
print('gray.size=',gray.size)
print('gray.dtype=',gray.dtype)
print('图像color的属性是: ')
print('color.shape=',color.shape)
print('color.size=',color.size)
print('color.dtype=',color.dtype)

输出:
图像gray的属性是:
gray.shape= (500, 500)
gray.size= 250000
gray.dtype= uint8
图像color的属性是:
color.shape= (560, 700, 3)
color.size= 1176000
color.dtype= uint8

你可能感兴趣的:(opencv_day02)