当前位置: 主页 > Python语言

python 图像切片-python surf图像匹配

发布时间:2023-03-09 16:17   浏览次数:次   作者:佚名

理解图像

图像其实就是一个2维数组,因此可以使用行列坐标对图像像素点进行定位。对于彩色图像,每个像素点对应的是一个包含bgr(cv2.imread读取的图像为BGR模式)的三元素的数组python 图像切片,灰度图像则每个像素对应一个灰度值。

px = img[100,100] #access pixel
print px          #print the pilxe value    

此外,可以使用数组的切片操作访问图像区域(ROI)

ball = img[280:340,330:390]
img[273:333,100:160] = ball

前面提到可以使用cv2.split获取颜色分量,在知道图像其实就是二维数组之后python 图像切片,还可以使用切片操作获取图像分量。

blue = img[:,:,0]
green = img[:,:,1]
red = img[:,:,2]

完整代码

import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('messi5.jpg',1) # read as bgr color mode
px = img[100,100]
print px
ball = img[280:340,330:390]
img[273:333,100:160] = ball
b,g,r = cv2.split(img)
img2 = cv2.merge((r,g,b))
blue = img[:,:,0]
green = img[:,:,1]
red = img[:,:,2]
img3 = cv2.merge((red,green,blue))  
cv2.imshow('image',img)
plt.subplot(121);plt.imshow(img2)
plt.subplot(122);plt.imshow(img3)
plt.show()
k = cv2.waitKey(0)
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('messigray.png',img)
    cv2.destroyAllWindows()

补充说明

除了使用python的数组操作访问图像像素,还可以使用图像的成员函数item/itemset,进行像素的访问与修改。但这种方法只能访问一个像素的一种颜色。如果是彩色图像,需要分别对bgr进行访问与修改。

px = img.item(0,0,2) # red
print px
img.itemset((0,0,2),100)
print img.item(0,0,2)