【图像处理学习】基于python的opencv

opencv-python库函数

cv2.imread

cv2.imread(filepath,flags)读入一副图片(BGR格式mat)

  • filepath:要读入图片的完整路径不能有中文
  • flags:读入图片的标志
    cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
    cv2.IMREAD_GRAYSCALE:读入灰度图片
    cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道

cv2.cvtColor

cvtColor(Mat src, Mat dst, int code)是一个颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间转换。也可以转换为灰度图。

  • src 表示来源的矩阵。
  • dst 表示目的地的矩阵。
  • code 表示转换类型的整数代码,例如RGB到灰度。

通过将代码与源矩阵和目标矩阵一起作为参数传递给方法,可以将彩色图像转换为灰度。

cv2.resize

cv.resize(img,(width,height))主要起到对图片进行缩放的作用。这个图像和原图像具有相同的内容,只是大小和原图像不一样而已

example: 以下代码就可以将原图片转化为宽和长分别为300,300的图片。width和height可以自己任意指定,不论大小。

  • img 表示处理图片
  • width 表示需要缩放宽度(像素/比例)
  • height 表示需要缩放高度(像素/比例)
不明所以
interpolation(插值):这个是指定插值的方式,图像缩放之后,肯定像素要进行重新计算的,就靠这个参数来指定重新计算像素的方式,有以下几种:
INTER_NEAREST - 最邻近插值
INTER_LINEAR - 双线性插值,如果最后一个参数你不指定,默认使用这种方法
INTER_CUBIC - 4x4像素邻域内的双立方插值
INTER_LANCZOS4 - 8x8像素邻域内的Lanczos插值

cv2.imencode()

retval, buf = imencode(ext, img, params=None)将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输。

  • ext:文件扩展名,以决定输出格式
  • img:待编码图像数据
  • params:格式化编码为成对的特定参数,该参数可选,由cv::ImwriteFlags定义
  • buf:输出的数据流(返回值)
  • retval,编码是否成功标志,类型为bool,编码成功返回true,编码失败返回false(返回值)
# -*- coding: utf-8 -*-
import numpy as np
import urllib
import cv2
 
img = cv2.imread('0122.jpg')
# '.jpg'表示把当前图片img按照jpg格式编码,按照不同格式编码的结果不一样
img_encode = cv2.imencode('.jpg', img)[1]
# imgg = cv2.imencode('.png', img)
 
data_encode = np.array(img_encode)
str_encode = data_encode.tostring()
 
# 缓存数据保存到本地
with open('img_encode.txt', 'w') as f:
    f.write(str_encode)
    f.flush

imshow

参考

https://blog.csdn.net/u013832707/article/details/100705436?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167171687416800192284418%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=167171687416800192284418&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-100705436-null-null.142v68control,201v4add_ask,213v2t3_esquery_v1&utm_term=cv.imshow&spm=1018.2226.3001.4187

函数

None = cv.imshow( winname, mat )该函数将图像在特定的窗口进行显示。

  • 第一个参数是窗口的名称
  • 第二个是待显示的图像

None = cv.moveWindow( winname, x, y )作用是将窗口放到指定的位置去,其中xy指代窗口的左上角在屏幕的坐标。

None = cv.namedWindow( winname[, flags])如果已经存在相同的窗口名称之后,该函数将会不做任何事情。

  • WINDOW_NORMAL or WINDOW_AUTOSIZE: WINDOW_NORMAL
    使得你能够改变窗口的尺寸,而WINDOW_AUTOSIZE会自适应图像的尺寸。

cv2.waitkey()

https://blog.csdn.net/weixin_44049693/article/details/106271643?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167171856216800215012385%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=167171856216800215012385&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-106271643-null-null.142v68control,201v4add_ask,213v2t3_esquery_v1&utm_term=cv2.waitKey&spm=1018.2226.3001.4187

cv.imshow()waitkey控制着imshow的持续时间
cv2.waitKey(1000) & 0xFF == ord(‘q’)
函数是HighGUI窗口中唯一的获取和处理事件的方法,因此它必须存在。
后必跟函数展示图片

setMouseCallback

cv2.setMouseCallback(winname, onMouse, userdata=0)

winname: 自定义的窗口名

onMouse:鼠标事件的回调函数(在发生鼠标事件时执行)

userdata:传递给回调函数的可选参数

onMouse函数:

onMouse 是鼠标事件回调函数的默认原型,可自定义其函数名和函数内容,参数一般默认为

    onMouse(event, x, y, flags, param)

    event:cv2_EVENT_* (MouseEventTypes)类型的变量,为当前发生的鼠标事件类型

    x和y: 发生鼠标事件时鼠标在图像位置的x,y坐标

    flags:  cv2_EVENT_FLAG_* (MouseEventFlags)类型的变量

    param:自定义的传递给 setMouseCallback 函数调用的参数

MouseEventTypes:

    EVENT_MOUSEMOVE             #滑动
    EVENT_LBUTTONDOWN         #左键点击
    EVENT_RBUTTONDOWN        #右键点击
    EVENT_MBUTTONDOWN       #中键点击
    EVENT_LBUTTONUP               #左键放开
    EVENT_RBUTTONUP              #右键放开
    EVENT_MBUTTONUP              #中键放开
    EVENT_LBUTTONDBLCLK      #左键双击
    EVENT_RBUTTONDBLCLK     #右键双击
    EVENT_MBUTTONDBLCLK    #中键双击

MouseEventFlags:

    EVENT_FLAG_LBUTTON        #左键拖曳
    EVENT_FLAG_RBUTTON       #右键拖曳
    EVENT_FLAG_MBUTTON       #中键拖曳
    EVENT_FLAG_CTRLKEY        #按 Ctrl 不放
    EVENT_FLAG_SHIFTKEY       #按 Shift 不放
    EVENT_FLAG_ALTKEY           #按 Alt 不放
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值