opencv 像素操作

把图片看成一个二维的矩阵,使用numpy来操作


import numpy as np
import cv2 as cv
 
img = cv.imread('test.jpg')
img[100,100] # 返回该坐标下的值,如果是gbr模式则返回数组,如果是灰度图模式则返回常量
img[100,100,2]  #再gbr模式下可以访问对应通道的值
img.item(10,10,2) # item方法是更快速的方法
img.itemset((10,10,2),10)
img.shape # 返回长宽还有通道数量
img.size # 
img.dtype # 一般都是uint8

获得指定区域

area = img[100:200,100:200]
img[200;300,200:300] = area

分割通道

b,g,r = cv.split(img) # split是高代价的函数,一般都是用索引
img = cv.merge((b,g,r))
b = img[:,:,0]  # 也可以达到同样的效果,这样更快

给图片添加边框

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255,0,0]
img1 = cv.imread('opencv-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.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')

参考文献:
https://docs.opencv.org/3.4.3/d3/df2/tutorial_py_basic_ops.html
https://blog.csdn.net/qq_41905045/article/details/81295931

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值