您的位置:首页 > 运维架构

6-Basic Operations on Images

2018-03-27 10:40 387 查看

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 = 50y = 170
ball = img[x:x+width, y:y+height]
img[0:0+width, 0:0+height] = ball

cv
9822
.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()


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: