python opencv使用方法基础

这篇博客详细介绍了如何使用Python的OpenCV库进行图像处理,包括读取、显示图片,修改像素,获取图像属性,添加边框,图片相加和权重合成等操作。通过实例展示了各功能的实现代码,是理解OpenCV图像处理的良好教程。
摘要由CSDN通过智能技术生成

安装:

pip install numpy opencv-python

读取图片

imread(filename,flag) 读取图片,返回图片对象
    img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为None
    flag:cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入1
          cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0
          cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1

eg:

desert_img = cv2.imread(r'Desert.jpg',cv2.IMREAD_GRAYSCALE)

显示照片

imshow(window_name,img):显示图片,窗口自适应图片大小
    window_name: 指定窗口的名字
    img:显示的图片对象
    可以指定多个窗口名称,显示多个图片
    
waitKey(millseconds)  键盘绑定事件,阻塞监听键盘按键,返回一个数字(不同按键对应的数字不同)
    millseconds: 传入时间毫秒数,在该时间内等待键盘事件;传入0时,会一直等待键盘事件
    
destroyAllWindows(window_name) 
    window_name: 需要关闭的窗口名字,不传入时关闭所有窗口

eg:

def waitkey(im):
    cv2.imshow('image', desert_img)
    cv2.waitKey(0)

desert_img = cv2.imread(r'Desert.jpg',cv2.IMREAD_GRAYSCALE)

p =threading.Thread(target = waitkey, args=[desert_img,])
p.start()
p.join(2)
cv2.destroyAllWindows()

获取图片像素或者是编辑像素

在这里插入代码片
new_img = desert_img
cv2.imshow('d',desert_img)
new_img[100:200,100] = numpy.zeros((100,3))
cv2.imshow('c', new_img)
cv2.waitKey(0)

在这里插入图片描述
获取图片性质’
1、shape 获取图片像素,(宽x,长y,3通道(BGR))
2、size获取图片像素量(xy3)
eg:

print(desert_img.shape,desert_img.size,)

(768, 1024, 3) 2359296
截取图片

roi = desert_img[600:700,300:400]
desert_img[50:150,200:300] = roi
cv2.imshow('a',desert_img)
cv2.waitKey(0)

在这里插入图片描述
添加边框:

cv2.copyMakeBorder()
    参数:
        img:图像对象
        top,bottom,left,right: 上下左右边界宽度,单位为像素值
        borderType:
            cv2.BORDER_CONSTANT, 带颜色的边界,需要传入另外一个颜色值
            cv2.BORDER_REFLECT, 边缘元素的镜像反射做为边界
            cv2.BORDER_REFLECT_101/cv2.BORDER_DEFAULT
            cv2.BORDER_REPLICATE, 边缘元素的复制做为边界
            CV2.BORDER_WRAP
        value: borderType为cv2.BORDER_CONSTANT时,传入的边界颜色值,如[0,255,0]
img = cv2.cvtColor(desert_img,cv2.COLOR_BGR2RGB)
constant = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_CONSTANT,value=[255,0,0]) #红色
reflect = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_REFLECT)
reflect01 = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_REFLECT_101)
replicate = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_REPLICATE)
wrap = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_WRAP)
titles = ["constant","reflect","reflect01","replicate","wrap"]
images = [constant,reflect,reflect01,replicate,wrap]

for i in range(5):
    plt.subplot(2,3,i+1),plt.imshow(images[i]),plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
plt.show()

在这里插入图片描述
图片相加合成

cv2.add()
    参数:
        img1:图片对象1
        img2:图片对象2
        mask:None (掩膜,一般用灰度图做掩膜,img1和img2相加后,和掩膜与运算,从而达到掩盖部分区域的目的)
        dtype:-1

两张图片的像素必须是一样大小!
eg:

desert_img = cv2.imread(r'Desert.jpg',1)
lighthouse =  cv2.imread(r'Lighthouse.jpg',1)
roi_img  = numpy.zeros(desert_img.shape[0:2],dtype=numpy.uint8)
roi_img[100:280,100:250]=255
img_add = cv2.add(desert_img,lighthouse)
img_add_mask = cv2.add(desert_img,lighthouse,mask=roi_img)
cv2.imshow("img_add",img_add)
cv2.imshow("img_add_mask",img_add_mask)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
打入权重合成;

cv2.addWeighted() 两张图片相加,分别给予不同权重,实现图片融合和透明背景等效果
    参数:
        img1:图片对象1
        alpha:img1的权重
        img2:图片对象2
        beta:img1的权重
        gamma:常量值,图像相加后再加上常量值
        dtype:返回图像的数据类型,默认为-1,和img1一样

eg:

lighthouse =  cv2.imread(r'Lighthouse.jpg',1)
penguins = cv2.imread(r'Penguins.jpg',1)
blend = cv2.addWeighted(lighthouse,0.9,penguins,0.2,0)
cv2.imshow('blend', blend)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值