python-opencv的一些基本使用

前言

像我工作中会经常用到opencv的一些功能,这里做下使用笔记及一些重要函数的笔记

一、基本使用

import cv2
path = 'test.jpg'
# cv2.IMREAD_GRAYSCALE 灰度图形式打开,cv2.IMREAD_COLOR 默认打开
image = cv2.imread(path, cv2.IMREAD_GRAYSCALE) 
# 显示图片
cv2.imshow('test_win', image)
# 等待输入打断
cv2.waitKey(0) 

其中值得一提的是,通过imread返回的值是一个numpy形式的数组,但是BGR模式,而 matplotlib.pyplot 接口使用的是RGB模式,如在TensorFlow和其他深度学习框架打开也是RGB模型,所以使用opencv处理输入必须转为同样的形式。

import cv2
import matplotlib.pyplot as plt
path = 'test.jpg'
img = plt.imread(path )
# opencv显示
cv2.imshow('test_win', img)
cv2.waitKey(0)
# plt显示
plt.imshow(img)
plt.show()
# 等待输入打断
cv2.waitKey(0) 

在这里插入图片描述
上面打开的RGB形式的图片,用opencv和plt显示会有不一样的颜色(opencv BGR),可以使用下面的代码转变通道值

import cv2
import matplotlib.pyplot as plt
path = 'test.jpg'
img = plt.imread(path)
# 转为opencv形式
img_rev = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# opencv显示
cv2.imshow('test_win', img_rev)
cv2.waitKey(0)
# plt显示
plt.imshow(img)
plt.show()
# 等待输入打断
cv2.waitKey(0) 

在这里插入图片描述

二、图像学一些重要概念

以下介绍我工作中经常用到的一些函数,二值化,腐蚀,膨胀,模糊等

1、二值化

二值化处理顾名思义就是讲图片那种(width, height, channel)在0-255间的数值按照一定的关系转为0 1这种只有黑白颜色的图,以下是基本的使用和示例

# 反相灰度图,将黑白阈值颠倒
def accessPiexl(img):
    height = img.shape[0]
    width = img.shape[1]
    for i in range(height):
        for j in range(width):
            img[i][j] = 255 - img[i][j]
    return img
    
# 反相二值化图像
def accessBinary(img, threshold=128):
    img = accessPiexl(img)
    # 边缘膨胀,不加也可以
    kernel = np.ones((3, 3), np.uint8)
    img = cv2.dilate(img, kernel, iterations=1)
    _, img = cv2.threshold(img, threshold, 0, cv2.THRESH_TOZERO)
    return img
path = 'test1.png'
img = cv2.imread(path, 0)
img = accessBinary(img)
cv2.imshow('accessBinary', img)
cv2.waitKey(0)

在这里插入图片描述

2、膨胀

膨胀是图像中的高亮部分进行膨胀,领域扩张,效果图拥有比原图更大的高亮区域。知道卷积运算的同学可以这样理解,他就是给定一个kernel,然后做maxpooling。我常用这个函数消除噪点

import cv2
path = 'test.jpg'
img = plt.imread(path)
# 膨胀
kernel = np.ones((3, 3), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)
cv2.imshow('test_win', img)
cv2.waitKey(0) 

在这里插入图片描述

3、腐蚀

腐蚀是图像中的高亮部分被腐蚀掉,领域缩减,效果图拥有比原图更小的高亮区域。腐蚀也是做卷积计算,不同于膨胀的的是腐蚀做的是最小值池化

import cv2
path = 'test.jpg'
img = plt.imread(path)
# 膨胀
kernel = np.ones((3, 3), np.uint8)
img = cv2.erode(img,kernel)(img, kernel, iterations=1)
cv2.imshow('test_win', img)
cv2.waitKey(0) 

在这里插入图片描述

4、开运算和闭运算

开运算(Open Operation):先腐蚀后膨胀的过程。可以消除小物体,在纤细处分离物体;平滑较大的边界并不明显改变其面积;
在这里插入图片描述
闭运算(Closing Openration),先膨胀后腐蚀;排除小型黑洞(黑斑);
在这里插入图片描述

5、其他一些使用
import cv2
path = 'test.jpg'
img = plt.imread(path)
# 尺寸变换,转为300 * 300像素的图片
resize_img = cv2.resize(img , (300, 300))
# 裁剪,利用python的切片
cut_img = resize_img[100:200, 100:200]
# 画矩形,其中(100, 200), (300, 300)分别是左下角坐标, 右上角坐标,
rectangle_img = cv2.rectangle(img, (100, 200), (300, 300), (0, 0, 255))
# 画圆,其中(100, 200),1是半径,(0, 255, 0)颜色, 0是线宽
cv2.circle(img, (100, 200), 1, (0, 255, 0), 0)
# 写字,各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细
cv2.putText(img, str(results[i]), border[0], cv2.FONT_HERSHEY_COMPLEX, 0.8, (0, 255, 0), 1)

总结

以上就是opencv经常用的一些函数,下面通过会介绍我自己做的几个例子,利用opencv来找出纸张的边缘并做转化示例等,链接

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值