6-Basic Operations on Images

1、接受和修改像素值

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('./images/roi.jpg')

可以通过横纵坐标获得对用位置的像素值。返回值为[Blue,Green,Red]。

px = img[100, 100]
print(px)
[57 63 68]
blue = img[100,100,0]
print(blue)
57
img[100, 100] = [255, 255, 255]
print(img[100, 100])
[255 255 255]

上面的方法适合修改连续区域的像素值。
对于单个像素值得修改,使用arry.item()和array.itemset()是更好的办法。

img.item(10,10,2)
50
img.itemset((10, 10, 2), 100)
img.item(10, 10, 2)
100

2、接受图像的属性

图像的属性包括:行、列、通道数量;图像的数据类型;像素数量等。

print(img.shape)
(280, 450, 3)
print(img.size)
378000
print(img.dtype)
uint8

3、图像ROI

Region of Interest (ROI)即感兴趣的图像区域。可以对感兴趣的图像区域进行取值,赋值操作。
注意:用画图工具打开图片时,位置时(x, y)。具体差异是因为img是一个二维数组。二维数组确定图像上一点使用的行列,对应坐标轴恰好相反。

width = 60
height = 60 
x = 50
y = 170
ball = img[x:x+width, y:y+height]
img[0:0+width, 0:0+height] = ball

cv.imshow('head', img)
cv.waitKey(0)
cv.destroyAllWindows()

4、分割和合并颜色通道

b, g, r = cv.split(img)    #cv.split()是高代价函数,在需要的时候使用
img = cv.merge((b, g, r))
b = img[:,:,0]   #取出Blue通道的值
img[:,:,2] = 0   #对Red通道全赋0值

5、为图像制作边框(填充)

dst = cv.copyMakeBorder( src, top, bottom, left, right, borderType[, dst[, value]] )
borderType:
cv.BORDER_REFLECT:边框将镜像反射边框元素,如下所示:fedcba | abcdefgh | hgfedcb
cv.BORDER_REFLECT_101 or cv.BORDER_DEFAULT:和上面一样,但稍作改动,如下所示:gfedcb | abcdefgh | gfedcba
cv.BORDER_REPLICATE:最后一个元素在整个过程中被复制,如下所示:aaaaaa | abcdefgh | hhhhhhh
cv.BORDER_WRAP:无法解释,它将如下所示:cdefgh | abcdefgh | abcdefg
cv.BORDER_CONSTANT:添加一个常量彩色边框。 值应该作为下一个参数给出。value

BLUE = [255,0,0]
img1 = cv.imread('./images/logo.png')

replicate = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_WRAP)
constant= cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_CONSTANT,value=BLUE)

plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL'),plt.xticks([]),plt.yticks([])
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE'),plt.xticks([]),plt.yticks([])
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT'),plt.xticks([]),plt.yticks([])
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101'),plt.xticks([]),plt.yticks([])
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP'),plt.xticks([]),plt.yticks([])
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT'),plt.xticks([]),plt.yticks([])
plt.show()

这里写图片描述

猜你喜欢

转载自blog.csdn.net/Yeah_snow/article/details/79705389