雾看OpenCV(1)——Gui特性

在这里插入图片描述

前言

经过一段时间的视频学习,现在开始正式转入书本知识的学习。使用的书本是这个:OpenCV-Python-Tutorial-中文版20160814

正文

Gui操作

图像的读取,写入

这部分简单,就直接都放在代码里面了。

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

#cv.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略,这是默认参数。
#cv.IMREAD_GRAYSCALE:以灰度模式读入图像
#cv.IMREAD_UNCHANGED:读入一幅图像,并且包括图像的 alpha 通道
src = cv.imread("../images/lena.jpg",cv.IMREAD_COLOR)
gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY)# 图像灰度化
cv.imwrite("../images/gray.jpg",gray)
print(src.shape)
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)#cv2.WINDOW_NORMAL,你就可以调整窗口大小了
cv.imshow('input image', src)
k = cv.waitKey(0)&0xFF  # 等有键输入或者1000ms后自动将窗口消除,0表示只用键输入结束窗口
#,如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。
print(k)
if k == 27:
    cv.destroyAllWindows()#在括号内输入你想删除的窗口名。
else:
    print("else is print")
    cv.destroyAllWindows()#在括号内输入你想删除的窗口名。

在这里插入图片描述

matplotlib读取图片

对于彩色图片,一般由R,G,B三个通道构成。然而,需要注意的是,OpenCV里彩色图片加载时是按照BGR的顺序,Matplotlib里彩色图片加载时是按照RGB的顺序。

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

#第一部分
src = cv.imread("../images/lena.jpg",1)
plt.imshow(src)
plt.xticks([]),plt.yticks([])
plt.show()

#第二部分
b,g,r=cv.split(src) #通道的拆分
messi_rgb=cv.merge((r,g,b)) #通道的融合
plt.imshow(messi_rgb),plt.title('messi_rgb_plt')
plt.xticks([]),plt.yticks([])
plt.show()

第一部分的图像:
在这里插入图片描述
第二部分的图像:
在这里插入图片描述
注意:所有绘图函数的返回值都是返回none。

鼠標双击绘制圆

code:

import cv2 as cv
import numpy as np

def draw_circle(event,x,y,drags,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)
    key = cv.waitKey(1)
    print(key)
    if key==27:
        break

cv.destroyAllWindows()

效果图
在这里插入图片描述

用鼠标绘制曲线或图形

用这个函数左键可以绘制曲线,按上m,能绘制出图形。
效果图
在这里插入图片描述

code

import cv2 as cv
import numpy as np

drawing = False
mode = True
ix,iy = -1,-1

def drawCircleRectangel(event,x,y,flags,param):
    global ix,iy,drawing,mode
    if event==cv.EVENT_LBUTTONDOWN:
    #当按下左键时是返回起始坐标
        drawing = True
        ix,iy = x,y
    #当鼠标左键按下并移动绘制图形,event可以查看移动,flag查看是否按下
    elif event==cv.EVENT_MOUSEMOVE and flags==cv.EVENT_FLAG_LBUTTON:
        if drawing==True:
            if mode==True:
                cv.rectangle(src,(ix,iy),(x,y),(0,255,0),-1)
            else:
                cv.circle(src,(x,y),3,(0,0,255),-1)
    elif event==cv.EVENT_LBUTTONUP:
        drawing = False

src = np.zeros((512,512,3),np.uint8)
mode = False
cv.namedWindow('image',0)
cv.setMouseCallback('image',drawCircleRectangel)
while True:
    cv.imshow('image',src)
    k = cv.waitKey(1)&0xFF
    if k==ord('m'):
        mode=not mode
    elif k==ord('q'):
        break;

滑动条做调色板

cv2.creatTrackbar()有五个参数:
1:对象名字 2:对象所在面板的名字 3:Trackbar的默认值 4:Trackbar的上调范围(0-count) 5:是调节Trackbar的调用函数
cv2.getTrackbarPos() 同样有五个参数:
1:滑动条的名字 2:滑动条放置窗口的名字 3:滑动条默认位置 4:滑动条的最大值 5:回调函数(每次滑动条的滑动都会调用回到函数。回调函数通常都会有一个默认的参数,就是滑动条的位置。
效果图
在这里插入图片描述

code

import cv2 as cv
import numpy as np

def nothing(x):
    pass

img = np.zeros((300,512,3),np.uint8)# 创建一个颜色图片
cv.namedWindow('image')

cv.createTrackbar('R','image',0,255,nothing)#创建一个Bar
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)

switch="0:OFF\n1:ON"
cv.createTrackbar(switch,'image',0,1,nothing)
s = cv.getTrackbarPos(switch, 'image')
print("--->s:%s" % s)
while(1):
    cv.imshow('image',img)
    k=cv.waitKey(1)&0xFF
    if k==27:
        break;
    r = cv.getTrackbarPos('R', 'image')
    g = cv.getTrackbarPos('G', 'image')
    b = cv.getTrackbarPos('B', 'image')
    s = cv.getTrackbarPos(switch, 'image')
    if s==0:
        img[:] = 0
    else:
        img[:] = [b, g, r]  # 把滚动条里的颜色赋给图

参考

1.OpenCV-Python-Tutorial-中文版20160814

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值