图像输入输出模块imgcodecs
读取图像文件
读取图片
cv2.imread(path[, flag])
第二个参数指定图片被读取的方式:
cv2.IMREAD_COLOR
: 读入彩色图像,默认模式;cv2.IMREAD_GRAYSCALE
: 以灰度模式读入图像;cv2.IMREAD_UNCHANGED
: 加载图像包含alpha
通道。使用数字简约表示以上三种标记,分别为
1
,0
或-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()