OpenCV-图像基本操作

访问,修改图像像素

示例:

import numpy as np
import cv2 as cv

img = cv.imread('sample_dog.jpg')

# ---------------------------
px = img[100,100]
print( px )
# [153 206 186]

#仅仅获取蓝色像素的值
blue = img[100,100,0]
>>> print( blue )
153

#修改像素点的值
img[100,100] = [255,255,255]
print( img[100,100] )
# [255 255 255]
# 以上都是用numpy数组的方式来完成操作,但这种方式速度较慢
#---------------------------

#换一种方式,100,100为像素坐标,0,1,2为 B,G,R
img.item(100,100,0)
# 153
img.item(100,100,1)
# 206
img.item(100,100,2)
# 186
# 验证
img[100,100]
# array([153, 206, 186], dtype=uint8)

访问图像属性

示例:

# 图像维度
print( img.shape )
# (576, 768, 3)

# 图像大小
print( img.size )
1327104

# 图像数据类型
print( img.dtype )
# uint8

Image ROI (针对图像特定区域的操作)

import numpy as np
import cv2 as cv
img=cv.imread('sample_dog.jpg')
dog=img[200:520,100:320]
img[200:520,500:720]=dog
cv.imshow('dog',img)
cv.waitKey(0)
cv.destroyAllWindows()

OpenCV-图像基本操作_第1张图片

拆分合并图片通道

b,g,r = cv.split(img)
img = cv.merge((b,g,r))
# 修改red通道的值
img[:,:,2] = 0

图像边框操作

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255,0,0]

img=cv.imread('sample_dog.jpg')

replicate = cv.copyMakeBorder(img,100,100,100,100,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img,100,100,100,100,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img,100,100,100,100,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img,100,100,100,100,cv.BORDER_WRAP)
constant= cv.copyMakeBorder(img,100,100,100,100,cv.BORDER_CONSTANT,value=BLUE)

plt.subplot(231),plt.imshow(img,'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中颜色为b,g,r。 因为在matplotlib 中red和blue会互换导致图像颜色变化

cv.copyMakeBorder() 参数含义:

  1. src : 输入图像
  2. top, bottom, left, right : 对应位置边框宽度
  3. value : cv.BORDER_CONSTANT,cv.BORDER_REFLECT,cv.BORDER_REFLECT_101 or cv.BORDER_DEFAULT ,cv.BORDER_REPLICATE,cv.BORDER_WRAP

    cv.BORDER_CONSTANT - 定义一个边框颜色的常数
    cv.BORDER_REFLECT - 边框将是边框像素的镜像反射,就像:fedcba |abcdefgh|hgfedcb 这样
    cv.BORDER_REFLECT_101 or cv.BORDER_DEFAULT -和上面几乎一样,有些许变化,就像: gfedcb|abcdefgh|gfedcba 这样
    cv.BORDER_REPLICATE - 最后一个像素在整个过程中被复制,像:aaaaaa |abcdefgh|hhhhhhh这样
    cv.BORDER_WRAP - 对称方向 像素互换 就像: cdefgh|abcdefgh|abcdefg 这样

OpenCV-图像基本操作_第2张图片

你可能感兴趣的:(OpenCV,OpenCV)