欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenCV(八)—— 图像的基本操作

程序员文章站 2022-03-25 17:27:07
...
  • 获取像素值并修改
import cv2
import numpy as np

img = cv2.imread('/home/blvin/图片/don.png')

#获取像素值
px = img[10,100]
print(px)

blue = img[10,100,2]
print(blue)

#修改像素值
img[10,100] = [255,255,255]
print(img[10,100])

#获取像素值及修改的更好方法
print(img.item(10,100,2))
img.itemset((10,100,2),100)
print(img.item(10,100,2))
  • 获取图像属性
#获取图像属性
print(img.shape)
#如果是灰度图,返回值仅有行数和列数

#返回像素点数目
print(img.size)

#返回图像的数据类型
print(img.dtype)
  • 图像ROI
    ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。在Halcon、OpenCV、Matlab等机器视觉软件上常用到各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理。
b = img[100:200,300:400]
img[100:200,100:200] = b
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27:
    cv2.destroyAllWindows()
  • 运行效果
    OpenCV(八)—— 图像的基本操作

  • 拆分及合并图像通道
    把G通道的值都赋为0

img[:,2,:] = 0
  • 为图像扩边
import cv2
import numpy as np
from matplotlib import pyplot as plt

BLUE = [255,0,0]

img1 = cv2.imread('opencv_logo.png')

replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.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')

plt.show()