opencv和python的接口_opencv python接口用法

本文介绍了Python中使用OpenCV进行图像处理的基本操作,包括图像读写、图像转换、图像旋转、通道分离与融合、图像索引、图像属性、绘图函数以及各种滤波方法。重点讲解了cv2.imread(), cv2.imwrite(), cv2.cvtColor(), cv2.resize(), cv2.split(), cv2.merge(), cv2.getRotationMatrix2D(), cv2.warpAffine()等函数的用法。" 132487127,10261673,Cocos游戏开发:计时器管理器的实现与价值,"['游戏开发', '前端框架', 'Cocos2d', '计时器']
摘要由CSDN通过智能技术生成

python中使用opencv需要导入

import cv2

图像读写

在python中,图像使用numpy数组表示。

读写支持各种静态的图像文件格式(bmp,png, jpg, jpeg)

img = cv2.imread( img_path , [*] ) 读图像 返回的是一个numpy数组。格式(BGR)3通道,即使是灰度图。

cv2.imwrite( img_path , img ) 写图像。要求通道是(BGR)或者灰度格式。

cv2.waitKey() 参数1:等待时间,单位毫秒。

一般与cv2.imshow()搭配使用,另一个实用的功能就是通过按键进入if条件语句

exp1:

比如下面按ESC关闭窗口,退出循环,结束程序。

cv2.imshow("Origin", image)

key = cv2.waitKey(1)

if key == 27:

cv2.destroyAllWindows()

break

图像转换

img = cv2.cvtColor( img, cv2.COLOR_GRAY2BGR) 将单通道图像,转变为3通道(BGR)

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 转换为灰度图

img.reshape(h,w,c) 重新定义数组的维度。 h , w , c

void resize(

InputArray src, //输入原图像

OutputArray dst, //输出结果图像

Size dsize, //设定结果图像的尺寸

double fx = 0, //在x轴上的缩放比例

double fy = 0, //在y轴上的缩放比例

int interpolation = INTER_LINEAR //差值方式(计算新图像的各点像素)

);

src:待变换输入原图,可以为单通道灰度图像,也可以为3通道彩色图像

dsize:变换后的图像尺寸,格式:宽高通道;当dsize为0时,它可以通过以下公式计算得出:

dsize = Size(round(fxs*rc.cols), round(fy*src.rows))

fx - 水平轴上的比例因子。当它为0时,计算公式如下:(double)(dsize.width/src.cols)

fy - 垂直轴上的比例因子。当它为0时,计算公式如下:(double)(dsize.heifht/src.rows)

interpolation - 插值方法

interpolation取值:INTER_NEAREST - 最近邻插值法

interpolation取值:INTER_LINEAR - 双线性插值法(默认)

interpolation取值:INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。

对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。

interpolation取值:INTER_CUBIC - 基于4x4像素邻域的3次插值法

interpolation取值:INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值

注意:参数dsize和参数(fx, fy)不能够同时为0

通道分离

void split(

const Mat& src, //待分离的多通道矩阵

Mat* mvbegin //矩阵数组,保存分离后的单通道矩阵

);

void split(

InputArray m, //待分离的多通道矩阵

OutputArrayOfArrays mv //vector容器,保存分离后的单通道矩阵

);

通道融合

void merge(

const Mat* mv, //矩阵数组,包含多个待融合单通道矩阵

size_t count, //需要融合的矩阵数目

OutputArray dst //输出结果(融合后的多通道矩阵)

);

void merge(

InputArrayOfArrays mv, //vector容器,包含多个待融合单通道矩阵

OutputArray dst //输出结果(融合后的多通道矩阵)

);

图像旋转

M = cv2.getRotationMatrix2D((width/2, height/2), angle, scale)

# M为旋转矩阵,第一个参数是设定旋转中心,第二个参数是旋转角度(单位是度,逆时针为正),第三个参数是缩放比例

ratation = cv2.warpAffine(image, M, (width, height))

图像索引

图像是以numpy数组形式存储,就可以看成三维数组,任何numpy支持的操作,都可以操作图像。最方便的莫过于索引和切片。

img[i,j,k] i 表示y 坐标, j 表示x坐标, k表示通道

img.itemset( (10,10 ,0), 255) 设置像素值

img.item(( 10 ,10 ,0)) 获取像素值

图像属性

img.shape 返回包含宽度,高度和通道数的数组

img.size 返回图像像素的大小

img.dtype 图像的数据类型,int or float

绘图

cv2.putText() 参数1:图像,参数2:文字内容,参数3:坐标位置,参数4:字体,参数5:字号,参数6:颜色,参数7:字体粗细

cv2.rectangle() 参数1:图像,参数2:左上角坐标,参数3:右下角坐标,参数4:框的颜色,参数5:框的粗细

void line(

InputOutputArray img, //要绘制线段的图像

Point pt1, //线段的起点

Point pt2, //线段的终点

const Scalar& color, //线段的颜色,通过一个Scalar对象定义

int thickness = 1, //线条的宽度

int lineType = LINE_8, //线段的类型,默认值为8邻接

int shift = 0 //坐标点小数点位数

);

void circle(

InputOutputArray img, //输入输出图像

Point center, //圆心坐标

int radius, //圆的半径

const Scalar& color, //圆的颜色,Scalar(B, G, R)

int thickness = 1, //圆的线条宽度,正数表示线条的粗细程度,负数表示圆被填充

int lineType = LINE_8, //线条的类型

int shift = 0 //圆心坐标点和半径值的小数点位数

);

图像处理

高斯平滑滤波 cv2.GaussianBlur() 参数1:图像,参数2:滤波器大小,参数3:标准差

gray = cv2.GaussianBlur(gray,(3,3),0) #模糊图像

中值滤波 cv2.medianBlur() 参数1:图像,参数2:滤波尺寸

gray = cv2.medianBlur(gray,5) # 填充白色噪点

均值滤波

void blur(

InputArray src, //待均值滤波的输入图像

OutputArray dst, //滤波后的输出图像

Size ksize, //滤波器尺寸(大于1的奇数)

Point anchor = Point(-1,-1), //滤波器中心位置

int borderType = BORDER_DEFAULT //边界模式,用于推断图像外部像素的某种边界模式

);

高斯滤波

void GaussianBlur(

InputArray src, //待高斯滤波的输入图像

OutputArray dst, //滤波后的输出图像

Size ksize, //滤波器尺寸(大于1的奇数)

double sigmaX, //高斯核函数在X方向上的标准差

double sigmaY = 0, //高斯核函数在Y方向上的标准差

int borderType = BORDER_DEFAULT //边界模式,用于推断图像外部像素的某种边界模式

);

中值滤波

void medianBlur(

InputArray src, //待中值滤波的输入图像,要求为1通道、3或4通道图像

OutputArray dst, //滤波后的输出图像

int ksize //滤波器尺寸(大于1的奇数)

);

阈值分割函数

double threshold(

InputArray src, //输入图像

OutputArray dst, //输出图像

double thresh, //阈值

double maxval, //使用 BINARY 或 BINARY_INV 方法时的最大值

int type //选用 OpenCV 提供的阈值分割方法

);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值