OpenCV的基本操作

图像输入输出模块imgcodecs

读取图像文件

读取图片

cv2.imread(path[, flag])

第二个参数指定图片被读取的方式:

  • cv2.IMREAD_COLOR : 读入彩色图像,默认模式;
  • cv2.IMREAD_GRAYSCALE : 以灰度模式读入图像;
  • cv2.IMREAD_UNCHANGED : 加载图像包含alpha通道。

使用数字简约表示以上三种标记,分别为 10-1

import cv2
image_path = "images.jpg"
img = cv2.imread(image_path,0)

读取失败返回None

读取照片的高度与宽度

import cv2 as cv
import numpy as np
img=cv.imread('pic.png')
print(np.shape(img))

height=np.shape(img)[0]
width=np.shape(img)[1]
channles=np.shape(img)[2]
print("height:",height)
print('width:',width)
print('channles:',channles)

保存照片

imwrite(filename,img[,params)->retval
import cv2 as cv
import numpy as np
img=cv.imread('pic.png')
height,width=img.shape[:2]
cv.line(img,(0,0),(width,height),(0,0,255),1)
cv.imwrite('output.jpg',img)
img=cv.imread('output.jpg')
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

OpenCV界面编程

新建窗口函数

namedWindow(winname[,flags])

flags

  • cv2.WINDOW_AUTOSIZE 窗口大小自动适应

  • cv2.WINDOW_NORMAL

import cv2 as cv
import numpy as np
img=cv.imread('pic.png')
cv.namedWindow('hemo',cv.WINDOW_NORMAL)
cv.imshow('hemo',img)
cv.waitKey(6000)
cv.destroyAllWindows()

单窗口显示多图片

利用numpy的hstack函数合并行数相同的矩阵数组

import cv2 as cv
import numpy as np
img1=cv.imread('pic.png')
img2=cv.imread('pic2.png')
img=np.hstack([img1,img2])
cv.imshow('a',img)
cv.waitKey(0)
cv.destroyAllWindows()

销毁窗口

  • cv2.destroyWindow(winname)

  • cv2.destroyAllWindows(winname)

  • cv2.resizeWindow(winname,width,height)

import cv2 as cv
import numpy as np
img1=cv.imread('pic.png')
img2=cv.imread('pic2.png')
img=np.hstack([img1,img2])
cv.namedWindow('1',cv.WINDOW_NORMAL)
cv.imshow('1',img)
cv.resizeWindow('1',900,300)
cv.waitKey(0)
cv.destroyAllWindows()
cv.destroyWindow()

鼠标事件

OpenCV使用setMousecallback设定

//设置回调函数
def setMouseCallback(windowName, onMouse, param=None):
//回调函数
void your_mouse_callback(int event,int x,int y,int flags,void* param) ;

鼠标事件event

enum
{
EVENT_MOUSEMOVE =0, //鼠标移动
EVENT_LBUTTONDOWN =1, //按下左键
EVENT_RBUTTONDOWN =2, //按下右键
EVENT_MBUTTONDOWN =3, //按下中键
EVENT_LBUTTONUP =4, //放开左键
EVENT_RBUTTONUP =5, //放开右键
EVENT_MBUTTONUP =6, //放开中键
EVENT_LBUTTONDBLCLK =7, //左键双击
EVENT_RBUTTONDBLCLK =8, //右键双击
EVENT_MBUTTONDBLCLK =9, //中键双击
EVENT_MOUSEWHEEL =10, //滚轮滚动
};

鼠标事件flags

enum
{
CV_EVENT_FLAG_LBUTTON =1, //左键拖拽
CV_EVENT_FLAG_RBUTTON =2, //右键拖拽
CV_EVENT_FLAG_MBUTTON =4, //中键拖拽
CV_EVENT_FLAG_CTRLKEY =8, //按住CTRL拖拽
CV_EVENT_FLAG_SHIFTKEY =16, //按住Shift拖拽
CV_EVENT_FLAG_ALTKEY =32 //按住ALT拖拽
};

import cv2 as cv
import numpy as np
img=np.zeros((400,400))
def draw_circle(event,x,y,flags,param):
    if event==cv.EVENT_LBUTTONDOWN:
        cv.circle(img,(x,y),20,255,-1)
cv.namedWindow('1')
cv.setMouseCallback('1',draw_circle)
while(1):
    cv.imshow('1',img)
    n=cv.waitKey(5)
    if n==ord('q'):
        break
    elif n==ord('s'):
        cv.imwrite('output.jpg',img)
        print('保存成功')
cv.destroyAllWindows()

滑动条事件

def createTrackbar(trackbarName, windowName, value, count, onChange):
def TrackbarCallback(pos,userdata)
def getTrackbarPos(trackbarname, winname):
def setTrackbarPos(trackbarname, winname, pos): 
import cv2 as cv
import cv2
import numpy as np
alpha=0.3
beta=80
img=cv2.imread('pic.png')
img2=cv.imread('pic.png')
def upadateAlpha(x):
    global alpha,img,img2,beta
    alpha=cv.getTrackbarPos('Alpha','1')
    alpha=alpha*0.01
    img=np.uint8(np.clip((alpha*img2+beta),0,255))
def updateBeta(x):
    global alpha, img, img2,beta
    beta=cv.getTrackbarPos('Beta','1')
    img=np.uint8(np.clip((alpha*img2+beta),0,255))

cv.namedWindow('1')
cv.createTrackbar('Alpha','1',0,300,upadateAlpha)
cv.createTrackbar('Beta','1',0,255,updateBeta)
cv.setTrackbarPos('Alpha','1',100)
cv.setTrackbarPos('Beta','1',10)
while(1):
    cv2.imshow('1',img)
    if cv.waitKey(1)==ord('q'):
        break
cv.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值