修改像素值有两种方法,第一种是直接访问数组修改,第二种是使用item和itemset函数访问和修改。
img=cv.imread('C:\\Users\\Administrator\\Desktop\\123\\2.jpg',0)
#方法一
img[100,100]=0
#方法二
print(img.item(100,100))
img.itemset(100,100,0)
图像属性包括行数,列数和通道数,图像数据类型,像素数等。
图像的形状可通过 img.shape 访问。它返回行,列和通道数的元组。如果图像是灰度的,则返回的元组仅包含行数和列数,因此这是检查加载的图像是灰度还是彩色的好方法。
print( img.shape )
像素总数可通过访问 img.size
print( img.size )
图像数据类型通过 img.dtype 获得
print( img.dtype )
图像的分割,将图像中的一部分切割出来,用到的其实是分片的特性。
import cv2 as cv
cv.namedWindow('image')
img=cv.imread('C:\\Users\\Administrator\\Desktop\\123\\2.jpg',0)
print(img.shape)
img1=img[50:100,25:75]
cv.imshow('image',img1)
cv.waitKey(10000000)
cv.destroyAllWindows()
拆分和合并图像通道,有两种方法,第一种是使用分片的特性进行拆分,第二种是使用opencv内置得到split()函数和merge()函数进行拆分。
注意:cv.split() 是一项耗时的操作(就时间而言)。因此,仅在必要时才这样做。否则请进行Numpy索引。
import cv2 as cv
cv.namedWindow('image')
img=cv.imread('C:\\Users\\Administrator\\Desktop\\123\\2.jpg',0)
#第一种
b = img [:, :, 0]
g = img [:, :, 1]
r = img [:, :, 2]
img1=cv.merge((r,g,b))
#第二种
b,g,r = cv.split(img)
img = cv.merge((r,g,b))
为图像增加边框
cv.copyMakeBorder()函数可以为图像增加边框,他的输入为需要加边框的图片,上边框宽度,下边框宽度,左边框宽度,右边框宽度,边框类型,关于某些边框类型的参数value。然后返回一个加上边框的图像。
代码例子:
import cv2 as cv
img1 = cv.imread('C:\\Users\\Administrator\\Desktop\\123\\2.jpg')
replicate = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REPLICATE)
cv.namedWindow("image")
cv.imshow("image",replicate)
cv.waitKey(100000000)
常见边框类型和对应的处理方法:
边框代码 | 处理方法 |
---|---|
BORDER_REPLICATE | 复制法 aaaaaa[abcdefgh]hhhhhhh 取图片最边界的一个像素点作为边框,边框长度是几就复制几次 |
BORDER_REFLECT | 对称法 fedcba[abcdefgh]hgfedcb 取图片最边缘的一个像素为对称轴,然后对称复制对称轴另一侧边框长度的图片作为边框。(边框类型的默认方法) |
BORDER_CONSTANT | 常量法 iiiiii[abcdefgh]iiiiiii 以一个常量像素值填充扩充的边界值,该值由参数确定。 |
BORDER_REFLECT_101 | gfedcb[abcdefgh]gfedcba 将图片左边边框长度的像素复制,然后翻转作为图片的边框 |
BORDER_WRAP | cdefgh[abcdefgh]cdefg 将图片右边边框长度的像素复制,然后作为图片的边框 |