今天主要学习了利用numpy.array访问像素和ROI
一,numpy.array访问像素
1.使用Numpy生成一个二维随机数组,用来模拟一幅灰度图像,并对其像素进行访问,修改
# 使用Numpy生成一个二维随机数组,用来模拟一幅灰度图像,并对其像素进行访问,修改 import numpy as np img=np.random.randint(10,99,size=[5,5],dtype=np.uint8) print("imh=\n",img) print("读取像素点img.item(3,2)=",img.item(3,2)) img.itemset((3,2),255)#将图像第3行第2列位置上的像素值修改为255 print("修改后img=\n",img) print("修改后像素点img.item(3,2)=",img.item(3,2))
输出结果如下:
2.生成一个灰度图像。让其中的像素值均为随机数
# 生成一个灰度图像。让其中的像素值均为随机数 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()
输出的结果如下:
如图,用,np.random.randint() 生成“黑白电视型马赛克”
另外,其他访问像素类操作类似于我们第二节的内容,详情可见 Opencv+Python学习记录2:图像处理的基本操作——像素处理(代码示例)_云修_的博客-CSDN博客
接下来,我们继续学习ROI部分的内容
二,ROI(感兴趣的内容)
1.获取图像girl的脸部信息,并将其显示出来
# 获取图像girl的脸部信息,并将其显示出来 import cv2 a=cv2.imread("girl.png",cv2.IMREAD_UNCHANGED) face=a[120:250,100:250]# 此处区域自设 cv2.imshow("original",a) cv2.imshow("face",face) cv2.waitKey() cv2.destroyAllWindows()
输出结果如下:
如图,经过反复调参后,可以得到仅为“face”的区域
2. 对girl图像的脸部进行打码
# 对girl图像的脸部进行打码 import cv2 import numpy as np a=cv2.imread("girl.png",cv2.IMREAD_UNCHANGED) cv2.imshow("original",a) face=np.random.randint(0,256,(130,150,4))#打码 a[120:250,100:250]=face#调整区域大小 cv2.imshow("result",a) cv2.waitKey() cv2.destroyAllWindows()
输出结果如下:
此处需要注意的是,“random”打码区域大小需要与“face”区域大小保持一致
即:130=250-120;150=250-100
否则,就可能报以下错误
3.将一幅图像的ROI复制到另一幅图像内
# 将一幅图像的ROI复制到另一幅图像内 import cv2 gray1=cv2.imread("gray1.jpg",cv2.IMREAD_UNCHANGED) gray3=cv2.imread("gray3.jpg",cv2.IMREAD_UNCHANGED) cv2.imshow("gray1",gray1) cv2.imshow("gray3",gray3) face=gray1[300:500,150:300] gray3[50:250,150:300]=face cv2.imshow("result",gray3) cv2.waitKey() cv2.destroyAllWindows()
因此处似乎只支持灰度图像修改,故博主采用了其他图片
输出结果如下:
当然,针对不同的图片,选取区域的参数是需要更改的
附件(样例图片):
girl.png
gray1.jpg
gray3.jpg
以及被我舍去的gray2.jpg