openCV为图像扩边填充

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值