OpenCV对图像的一些基本操作

1.访问和修改像素值

有两种方法,代码示例:

import numpy as np
import cv2 as cv
img = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac.jpg')
#方法一
print(img[100,100])
print(img[100,100,2])
img[100,100,2] = 150
print(img[100,100,2])
#方法二
print(img.item(100,100,2))
img.itemset((100,100,2),255)
print(img.item(100,100,2))

2.访问图像属性

有三种属性,代码示例:

import numpy as np
import cv2 as cv
img = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac.jpg')
print(img.shape)   #图像形状(行,列,通道数(若为灰度图像则无这一项))
print(img.size)    #图像像素总数
print(img.dtype)   #图像数据类型

3.图像的分割及复制

将图像的一部分进行分割,并将其复制到指定的位置,代码示例:

import numpy as np
import cv2 as cv
img = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac.jpg')
half = img[0:1080, 0:960]
img[0:1080, 960:1920] = half
cv.imwrite('change.jpg', img)

4.拆分及合并图像通道

将BGR图像的B、G、R三通道进行分割存储,再合并成RGB图像格式,代码示例:

import numpy as np
import cv2 as cv
img = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac.jpg')
#方法一
b, g ,r = cv.split(img)
img2 = cv.merge([r, g, b])
#方法二
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]
img3 = cv.merge([r, g, b])

5.为图像添加边框

主要使用cv.copyMakeBorder()函数,此函数有以下参数:
①输入图像
②上边框宽度
③下边框宽度
④左边框宽度
⑤右边框宽度
⑥边框类型,包括5种:

  • cv.BORDER_CONSTANT
    添加恒定的彩色边框。该值应作为下一个参数给出。
  • cv.BORDER_REFLECT
    边框将是边框元素的镜像,如下所示: fedcba | abcdefgh |
    hgfedcb
  • cv.BORDER_REFLECT_101或cv.BORDER_DEFAULT
    例如: gfedcb | abcdefgh | gfedcba
  • cv.BORDER_REPLICATE
    最后一个元素被复制,例如: aaaaaa | abcdefgh | hhhhhhh
  • cv.BORDER_WRAP
    例如: cdefgh | abcdefgh | abcdefg

⑦value -边框的颜色(边框类型为cv.BORDER_CONSTANT)

代码示例:

import numpy as np
import cv2 as cv
img = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac.jpg')
img1 = cv.cvtColor(img, cv.COLOR_BGR2RGB)
replicate = cv.copyMakeBorder(img1, 100, 100, 100, 100, cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img1, 100, 100, 100, 100, cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img1, 100, 100, 100, 100,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img1, 100, 100, 100, 100, cv.BORDER_WRAP)
constant = cv.copyMakeBorder(img1, 100, 100, 100, 100, cv.BORDER_CONSTANT,(255,0,0))
plt.subplot(2, 3, 1)
plt.title('ORIGINAL')
plt.imshow(img1)
plt.xticks([]), plt.yticks([])

plt.subplot(2, 3, 2)
plt.title('REPLICATE')
plt.imshow(replicate)
plt.xticks([]), plt.yticks([])

plt.subplot(2, 3, 3)
plt.title('REFLECT')
plt.imshow(reflect)
plt.xticks([]), plt.yticks([])

plt.subplot(2, 3, 4)
plt.title('REFLECT_101')
plt.imshow(reflect101)
plt.xticks([]), plt.yticks([])

plt.subplot(2, 3, 5)
plt.title('WRAP')
plt.imshow(wrap)
plt.xticks([]), plt.yticks([])

plt.subplot(2, 3, 6)
plt.title('CONSTANT')
plt.imshow(constant)
plt.xticks([]), plt.yticks([])

plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值