opencv:基本操作2
1.获取像素,并对图像进行修改
import cv2 as cv
import numpy as np
image=cv.imread('D:/code/opencv/images/1.png')
print(image.shape)#看图像的形状
print(image.size)#图像大小78*85*3
cv.imshow("退学",image)
p=image[5,5]
print(p)
c=image[5,5,0]
print(c)
image[5,5]=[0,0,0]
cv.imshow("退学1",image)
cv.waitKey(0)
cv.destroyAllWindows()
#输出:
(77, 85, 3) 图像大小
[250 250 250] #[5,5,0]这个位置
250
2.图像ROI:处理感兴趣的区域
import cv2 as cv
import numpy as np
image=cv.imread('D:/code/opencv/images/1.png')
cv.imshow("退学",image)
c=image[30:40,50:60]
image[0:10,10:20]=c
cv.imshow("退学1",image)
cv.waitKey(0)
cv.destroyAllWindows()
3.拆分合并通道
import cv2 as cv
import numpy as np
image=cv.imread('D:/code/opencv/images/1.png')
cv.imshow("退学",image)
image[:,:,2]=0
cv.imshow("退学1",image)
cv.waitKey(0)
cv.destroyAllWindows()
4.为图像扩边(padding)
cv2.copyMakeBorder() #函数具体参数在代码里
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)
5.图像的运算
图像进行运行,要找两张图片像素一样大
1.图像加法
def add_color(m1, m2):#加
dst = cv.add(m1, m2)
cv.imshow("hh1", dst)
def subtract_color(m1, m2):
dst = cv.subtract(m1, m2)
cv.imshow("hh2", dst)
def divide_color(m1, m2):
dst = cv.divide(m1, m2)
cv.imshow("hh", dst)
def multiply_color(m1, m2):
dst = cv.multiply(m1, m2)
cv.imshow("hh3", dst)
def logcal(m1, m2):
dst = cv.bitwise_and(m1, m2)
cv.imshow("hh1", dst)
def logcal2(m1, m2):
dst = cv.bitwise_or(m1, m2)
cv.imshow("hh2", dst)
def logcal3(m1, m2):
dst = cv.bitwise_not(m1, m2) # 按位取反
cv.imshow("hh3", dst)
def logcal4(m1, m2):
dst = cv.bitwise_xor(m1, m2)
cv.imshow("hh4", dst)
2.图像混合:dst = α · img1 + β · img2 + γ
dst=cv2.addWeighted(img1,0.7,img2,0.3,0)