opencv for python

时间:2023-03-08 21:51:14

opencv显示图像:

  # -*- coding: UTF-8 -*-
import numpy as np
import cv2
from matplotlib import pyplot as plt img=cv2.imread("cat.png",5) #载入
cv2.imshow('image',img) #显示
k=cv2.waitKey(0)&0xFF #读取键盘输入,参数为在x毫秒内读取,x=0是无限等待读取
while(k!=27 and k!=ord('s')):
k=cv2.waitKey(0)&0xFF
if k==27:
cv2.destroyAllWindows()
elif k==ord('s'):
cv2.imwrite('mess.png',img)
cv2.destroyAllWindows() #关闭窗口,参数可以为窗口名

opencv载入图像,matplotlib显示:

  # -*- coding: UTF-8 -*-
import numpy as np
import cv2
from matplotlib import pyplot as plt img=cv2.imread('cat.png')
plt.imshow(img)
plt.show()

注:彩色图像使用OpenCV 加载时是BGR 模式。但是Matplotib 是RGB模式。所以彩色图像如果已经被OpenCV 读取,那它将不会被Matplotib 正确显示。

简单画图:

  # -*- coding: UTF-8 -*-
import numpy as np
import cv2
from matplotlib import pyplot as plt
cv2.namedWindow('hello')
img=np.zeros((512,512,3),np.uint8) #创建一张空图片
cv2.line(img,(60,90),(511,511),(255,0,0),6);
cv2.rectangle(img,(100,70),(300,300),(100,100,100),5)
cv2.circle(img,(200,200),60,(0,250,0),2)
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'opencv',(60,400),font,4,(25,25,90),2)
cv2.imshow('hello',img) cv2.waitKey(0)
cv2.destroyAllWindows()

鼠标事件:

  # -*- coding: UTF-8 -*-
import numpy as np
import cv2
from matplotlib import pyplot as plt
#鼠标事件回调函数 函数参数统一如此
def draw_rectangle(event,x,y,flags,param):
if event==cv2.EVENT_LBUTTONDBLCLK:
cv2.rectangle(img,(x,y),(x+30,y+30),(250,20,20),5) img=np.zeros((512,512,3),np.uint8)
cv2.namedWindow('hello')
cv2.setMouseCallback('hello',draw_rectangle)
while 1:
cv2.imshow('hello',img)
if cv2.waitKey(20)&0xFF==27:
break;
cv2.destroyAllWindows()

滑动条:

 # -*- coding: utf-8 -*-
"""
Created on Sun Jan 5 13:51:34 2014
@author: duan
"""
import cv2
import numpy as np
def nothing(x): #滑动条的位置,通常默认为pass
pass
# 创建一副黑色图像
img=np.zeros((250,512,3),np.uint8)
cv2.namedWindow('image')
cv2.createTrackbar('R','image',0,255,nothing) #创建滑动条 ,滑动条名称,显示窗口名称,范围,回调函数
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)
switch='0:OFF\n1:ON'
cv2.createTrackbar(switch,'image',0,1,nothing)
while(1):
cv2.imshow('image',img)
k=cv2.waitKey(20)&0xFF
if k==27:
break
r=cv2.getTrackbarPos('R','image')
g=cv2.getTrackbarPos('G','image')
b=cv2.getTrackbarPos('B','image')
s=cv2.getTrackbarPos(switch,'image')
if s==0:
img[:]=100
else:
img[:]=[b,g,r]
cv2.destroyAllWindows()

利用滑动条改变颜色画圆:

 # -*- coding: utf-8 -*-
import cv2
import numpy as np
r,b,g=0,0,0
def nothing(x): #滑动条的位置,通常默认为pass
pass def draw_circle(event,x,y,flags,param):
if event==cv2.EVENT_LBUTTONDBLCLK:
cv2.circle(img1,(x,y),10,(b,g,r),-1) # 创建一副黑色图像
img=np.zeros((250,512,3),np.uint8)
img1=np.zeros((250,512,3),np.uint8) cv2.namedWindow('image')
cv2.namedWindow('win') cv2.createTrackbar('R','image',0,255,nothing) #创建滑动条 ,滑动条名称,显示窗口名称,范围,回调函数
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing) cv2.setMouseCallback('win',draw_circle)
while(1):
cv2.imshow('win',img1)
cv2.imshow('image',img)
if cv2.waitKey(20)&0xFF==27:
break
r=cv2.getTrackbarPos('R','image')
g=cv2.getTrackbarPos('G','image')
b=cv2.getTrackbarPos('B','image')
img[:]=[b,g,r]
cv2.destroyAllWindows()