OpenCV- Quick start to Python(1)

一、OpenCV中的GUI特性

1、图像入门

(1)读取图像
函数:imread()
参数:
第一个参数是需要处理的图像
第二个参数指定了 读取图像的方式 : cv.IMREAD_COLOR ,加载彩色图像;
cv.IMREAD_GRAYSCALE,以灰度模式加载图像;cv.IMREAD_UNCHANGED,加载图像,
包括 alpha 通道。这三个标志可以用整数 1、0 或-1 表示。
例:img = cv.imread(‘messi5.jpg’, 0);

(2)显示图像
函数:imshow()
参数:
第一个参数是窗口名称,用一个字符串表示;
第二个参数是图像。
例:cv.imshow(‘image’, img);

(3)写入图像
函数:imwrite()
参数:
第一个参数是文件名,
第二个参数是要保存的图像。
例:cv.imwrite(‘messigray.png’, img); #该图像将以 PNG 格式保存在工作目录
中。

(4)相关函数
a)函数 waitKey()是一个键盘绑定函数,以毫秒为单位计算时间,该函数等待任何键盘
事件指定的毫秒。
例:cv.waitKey(0) #表示无限期等待一次敲击键盘
b)函数 namedWindow()是给窗口命名
参数: 第 一 个 参 数 是 窗 口 的 名 字 ; 第 二 个 参 数 是 指 定 窗 口 是 否 可 调 整 大 小 ,cv.WINDOW_AUTOSIZE,是默认值,cv.WINDOW_NORMAL 表示可以调整窗口大小。
例:cv.namedWindow(‘image’, cv.WINDOW_NORMAL) #可以调整该窗口的大小
c)destroyWindow()销毁窗口,destroyAllWindows()销毁所有窗口

实例 1_1#读取图像,并显示该图像

import numpy as np
import cv2 as cv
img = cv.imread('C:\\Users\\18069\\Pictures\\Camera Roll\\1066789.png',1)
cv.namedWindow('image', cv.WINDOW_NORMAL)
cv.imshow('image', img)
k = cv.waitKey(0)
if k == 27: #等待 ESC 直接退出,而不保存图像
    cv.destroyAllWindows()
elif k == ord('s'): #按“s”保存图像,并退出
    cv.imwrite('..\Images\messigray.png', img)
    cv.destroyAllWindows()
2、视频入门

可 以 通 过 函 数 cap.get(cv.CAP_PROP_FRAME_WIDTH) 和函数
cap.get(cv.CAP_PROP_FRAME_HEIGHT)获取每帧图像的宽度和高度。如果想将每帧图
像的分辨率从 640x480 修改为 320x240 ,可以通过 ret =
cap.set(cv.CAP_PROP_FRAME_WIDTH, 320) 和 ret =
cap.set(cv.CAP_PROP_FRAME_HEIGHT, 240)。

#实例 1_2: #打开笔记本上的摄像头
import numpy as np
import cv2 as cv
#打开笔记本上的摄像头
cap = cv.VideoCapture(0)
#判断摄像头是否打开
if not cap.isOpened():
    print ("Cannot open camear")
    exit()
while True:
 #逐帧捕获
    ret, frame = cap.read()
 #如果正确读取帧, ret 为 True
    if not ret:
        print ("Can't receive frame (stream end?). Exiting...")
        break
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
 #显示结果帧
    cv.imshow('frame', gray)
    if cv.waitKey(1) == ord('q'):
        break
#完成所有操作后,释放捕捉器
cap.release()
cv.destroyAllWindows()
#实例 1_3:#打开摄像头,并保存视频
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
#定义编解码器并创建 VideoWrite 对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print ("Can't receive frame (stream end?). Exiting...")
        break
    frame = cv.flip(frame, 0)
 #写翻转的框架
    out.write(frame)
    cv.imshow('frame', frame)
    if cv.waitKey(1) == ord('q'):
        break
#完成工作后释放所有内容
cap.release()
out.release()
cv.destroyAllWindows()

函数 imwrite()用于保存图像。
语法:Bool cv::imwrite(const String & filename,
InputArray img,
const std::vector& params = std::vector())
例:retval = cv.imwrite(filename, img[,params])

3、绘图功能

使用 OpenCV 中的函数可以绘制不同的几何形状。在介绍各种函数之前,先介绍经常需要用
到的各种参数,如:
img:需要处理的图像,
color:各种图形以不同的颜色显示,例如:(255,0,0)表示蓝色,
thick:默认厚度为 1,对于闭合图像传递-1,表示将填充形状,
lineType:线的类型

# 实例 1_4:
import numpy as np
import cv2 as cv
#创建黑色的图像
img = np.zeros((512, 512, 3), np.uint8)
#绘制一条厚度为 5 的蓝色对角线
cv.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
#绘制矩形
cv.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)
#画圆圈
cv.circle(img, (447, 63), 63, (0, 0, 255), -1)
#画椭圆
cv.ellipse(img, (256, 256), (100, 50), 0, 0, 180, 255, -1)
#画多边形
pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32)
pts = pts.reshape((-1, 1, 2))
cv.polylines(img, [pts], True, (0, 255, 255))
#添加文字
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img, 'OpenCV', (10, 500), font, 4, (255, 255, 255), 2,
cv.LINE_AA)
cv.namedWindow("Draw", cv.WINDOW_NORMAL)
cv.imshow("Draw", img)
k = cv.waitKey(0)
if k == 27: #等待 ESC 直接退出,而不保存图像
    cv.destroyAllWindows()
elif k == ord('s'): #按“s”保存图像并退出
    cv.imwrite('..\Images\draw.png', img)
    cv.destroyAllWindows()
4、鼠标作为画笔
import numpy as np
import cv2 as cv
#鼠标回调函数
def draw_circle(event, x, y, flags, param):
    if event == cv.EVENT_LBUTTONDBLCLK:
        cv.circle(img, (x, y), 100, (255, 0, 0), -1)
#创建一个黑色的图像,一个窗口,并绑定到窗口的功能
img = np.zeros((512, 512, 3), np.uint8 )
cv.namedWindow('image')
cv.setMouseCallback('image', draw_circle)
while (1):
    cv.imshow('image', img)
    if cv.waitKey(20) & 0xFF == 27: #esc
        break
cv.destroyAllWindows()
#实例 1_6:#拖动鼠标来绘制矩形或由圆点组成的曲线
import numpy as np
import cv2 as cv
drawing = False #如果按下鼠标,则为真
mode = False #如果为真,绘制矩形。按 m 键可以切换到曲线.
ix, iy = -1, -1
#鼠标回调函数
def draw_circle(event, x, y, flags, param):
    global ix, iy, drawing, mode
    if event == cv.EVENT_LBUTTONDOWN:
        drawing = True
        ix, iy = x, y
    elif event == cv.EVENT_MOUSEMOVE:
        if drawing == True:
            if mode == True:
                cv.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)
            else:
                cv.circle(img, (x, y), 5, (0, 0, 255), -1)
    elif event == cv.EVENT_LBUTTONUP:
        drawing = False
        if mode == True:
            cv.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)
        else:
            cv.circle(img, (x, y), 5, (0, 0, 255), -1)
img = np.zeros((512, 512, 3), np.uint8)
cv.namedWindow('Image')
cv.setMouseCallback('Image', draw_circle)
while (1):
    cv.imshow('Image', img)
    if cv.waitKey(20) & 0xFF == 27:
        break
cv.destroyAllWindows()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值