import cv2
#1获取像素值并修改
#way1:
img = cv2.imread('test.jpg')
#读入图像0(灰色),1或无(彩色)
px = img[100,100]
#获取像素值
img[100, 100] = [255, 255, 255]
#修改像素值
print(px)
#img[0, 0]是个类似坐标的东西,
# 如果imread的是0,他只会读出一个灰度值,结果就是一个数值;
# 倘若是1,独处的值类似[x,y,z]反应的是B,G,R三元色[255 255 255]
#way2:
import cv2
import numpy as np
img = cv2.imread('test.jpg')
print(img.item(10, 10, 0))#214
img.itemset((10, 10, 2), 100)
print(img.item(10, 10, 2))#100
'''
还是特别迷:
arr.item和arr.itemset都是获取像素值的方法,但是arr.itemset无法获取BGR值。只能通过arr.item分割使用
返回值是标量
一个一个修改像素值太慢,使用这个可以选取矩阵的一个区域。
'''
#2获取像素属性
#(包括行列,通道,数据类型,像素数目等)
import cv2
img=cv2.imread('test.jpg')
print(img.shape)
#图像的属性之形状,三个值分别是行;列;通道数的元组(1079, 1079, 3)
#如果返回值只有俩个说明他是灰度图(1079, 1079)
print(img.size)
#返回图像的像素数目3492723
print(img.dtype)
#返回图片的数据类型uint8
#3图像的ROI
'''
import cv2
img = cv2.imread('test1.png')
ball = img[280:340, 330:390]
#横坐标280-340,纵坐标330-390的图像拷贝下来
img[273:333, 100:160] = ball
#粘贴到273:333, 100:160这里
cv2.imshow('image',img)
cv2.waitKey(0)
'''
'''
#拆分及合并图像通道
import cv2
import numpy as np
img = cv2.imread('test1.png')
#way1:
[b, g, r] = cv2.split(img)#拆分
img = cv2.merge([b, g, r])#合并
#way2:
#img[:, :, 0] = 0
#img[:, :, 1] = 0
#img[:, :, 2] = 0
#想使所有像素的红色通道或其他通道为0,不必拆分再赋值,直接使用索引
cv2.imshow('image', img)
cv2.waitKey(0)
'''
#为图像扩边
#目的就是给图像整个边框,类似相框(据说有常数值和复制两种,不用不想知道,)
import cv2
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255, 0, 0]
img1 = cv2.imread('test2.png')
replicate = cv2.copyMakeBorder(img1, 10, 10, 10, 10, cv2.BORDER_REPLICATE)#重复最后一个元素
#类似:aaaaaa|abcdefgh|hhhhhh
reflect = cv2.copyMakeBorder(img1, 10, 10, 10, 10, cv2.BORDER_REFLECT)#边界元素镜像
#fedcba|abcdefgh|hgfedcb
reflect101 = cv2.copyMakeBorder(img1, 10, 10, 10, 10, cv2.BORDER_REFLECT_101)#类上
#gfedcb|abcdefgh|gfedcba
wrap = cv2.copyMakeBorder(img1, 10, 10, 10, 10, cv2.BORDER_WRAP)
#cdefgh|abcdefgh|abcdefg
constant = cv2.copyMakeBorder(img1, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=BLUE)#添加有颜色的常数值边界,要加value(即颜色)
#图像(输入的图像), top,bottom,left,right,(对应边界像素数目) broadtype(边界类型)
plt.subplot(231), plt.imshow(img1, 'gray'), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')
plt.show()
openCV为图像扩边填充
最新推荐文章于 2022-10-22 23:52:56 发布