先前操作
导包
用清华镜像源在Annaconda promots中Base环境下用pip命令
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
下载cv包
cv.__version__查看版号
注意
1.在同一文件夹下面,可以直接调用不写路径
import cv2 as cv
img = cv.imread("test1.jpg")
cv.imshow("test1", img)
cv.waitKey(0)
cv.destroyAllWindows()
2.在不同的文件夹下,需要先写调用路径
import cv2
image_path = "C:/Users/lx/Desktop/test2.jpg" #图片路径
img = cv2.imread(image_path)
cv2.imshow('bao',img) #显示图片,[图片窗口名字,图片]
cv2.waitKey(0) # 无限期显示窗口
Opencv中的读写操作
1、cv2.imread()函数
使用函数 cv2.imread(filepath,flags) 读入图像。
第一个参数是这幅图像应该在此程序的工作路径,或者给函数提供完整路径
第二个参数是要告诉函数应该如何读取这幅图片:
cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略,这是默认参数
cv2.IMREAD_GRAYSCALE:以灰度模式读入图像
cv2.IMREAD_UNCHANGED:读入一幅图像,并且包括图像的 alpha 通道
PS:alpha通道,又称A通道,是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明
2、cv2.imshow()函数
使用函数 cv2.imshow(Windownanme,image) 显示图像。
第一个参数是窗口的名称,字符串
第二个是待显示的图像
Matplotlib
这是python的绘图库,可以用来显示图像
import cv2
from matplotlib import pyplot as plt
image_path = "C:/Users/lx/Desktop/test2.jpg" #图片路径
img = cv2.imread(image_path)
plt.imshow(img,cmap="gray",interpolation="bicubic")
plt.xticks([]),plt.yticks([])
plt.show()
imshow()其实就是将数组的值以图片的形式展示出来,数组的值对应着不同的颜色深浅,而数值的横纵坐标就是数组的索引,比如一个1000X1000的数组,图片里的点也就有1000X1000个,比如第一个行第一个点的坐标就是(0,0),它的值会通过colorbar(也就是cmap)反映出来,所以按照我的理解,imshow()函数的功能就是把数值展示成热图。
import numpy as np
import matplotlib.pyplot as plt
x=np.array([[10,20,30,40],
[50,60,70,80]])
plt.imshow(x, cmap='RdBu')
cb = plt.colorbar(label='color bar settings')
plt.show()
图像显示数组的排列方式
PS.interpolation参数,此参数显示了不同图像之间的插值方式
官方示例下的插值效果
import matplotlib.pyplot as plt
import numpy as np
methods = [None, 'none', 'nearest', 'bilinear', 'bicubic', 'spline16',
'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric',
'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos']
\# Fixing random state for reproducibility
np.random.seed(19680801)
grid = np.random.rand(4, 4)
fig, axs = plt.subplots(nrows=3, ncols=6, figsize=(9, 6),subplot_kw={'xticks': [], 'yticks': []})
for ax, interp_method in zip(axs.flat, methods):
ax.imshow(grid, interpolation=interp_method, cmap='viridis')
ax.set_title(str(interp_method))
plt.tight_layout()
plt.show()
OpenCV 中的绘图函数
颜色正常是BGR但是在spyper编译后是RGB显示。很奇怪?
是因为在plot上画出来的
1.画线 cv2.line()
cv2.line(img,(,),(,),(255,0,0),w)
第一个参数 img:要划的线所在的图像;
第二个参数 point1:直线起点
第三个参数 point2:直线终点
第四个参数 color:直线的颜色[RGB]
第五个参数 thickness=1:线条粗细
2.画长方形cv2.rectangle()
cv2.rectangle(img,(384,150),(250,128),(255,0,0),3)
第一个参数 img:要划的线所在的图像;
第二个参数 point1:长方形左上方顶点
第三个参数 point2:长方形右下方顶点
第四个参数 color:直线的颜色[RGB]
第五个参数 thickness=1:线条粗细
3.画圆cv2.circle()
cv2.circle(img,(447,63),63,(0,0,255),-1)
第一个参数 img:要划的线所在的图像;
第二个参数 point1:圆心
第三个参数 r:半径
第四个参数 color:圆的颜色[RGB]
第五个参数 w=-1时,把圆填满
w>0时,为边界线的长度
4.画椭圆cv2.ellipse()
cv2.ellipse(img, (256,256), (100,50), 0, 0, 360, (0,255,0), -1)
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)
img:需要绘图的图像
center:椭圆中心点坐标
axes:椭圆尺寸(即长短轴)
angle:旋转角度(顺时针方向)
startAngle:绘制的起始角度(顺时针方向)
endAngle:绘制的终止角度(例如,绘制整个椭圆是0,360,绘制下半椭圆就是0,180)
color:线条颜色(BGR)
thickness:线条粗细(默认值=1)
lineType:线条类型(默认值=8)
shift:圆心坐标点和数轴的精度(默认值=0)
滑动条做调色板
import cv2
def nothing(x):#预设的回调函数
pass
img=(np.zeros((300,512,3),np.uint8))#创建一个图像,300x512大小,数据类型无符号8位
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,255,nothing)#类似于布尔开关的转换条
while(1):
cv2.imshow("image",img)
k=cv2.waitKey(1)&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[:]=0
else:
img[:]=[b,g,r]#显示颜色
cv2.destroyAllWindows()
cv2.createTrackbar(trackbarName, windowName, value, count, onChange) 创建TrackBar控件,
trackbarName 滑动条的名字
windowName 滑动条被放置的窗口的名字
value为trackbar(滑动条)的默认值,
count为trackbar(滑动条)的最大值, 最小为0
onChange 回调函数,每次滑动都会调用回调函数,callback
cv2.getTrackbarPos(trackbarname, winname) 获取TrackBar当前值,即得到滑动条的数值
trackbarname 滑动条的名字
winname 滑动条被放置的窗口的名字
返回值是滑动条的数值
画板
import numpy as np
import cv2
def nothing(x):
pass
drawing=False
mode=True
ix,iy=-1,-1
def draw_circle(event,x,y,flags,param):
r=cv2.getTrackbarPos("R","image")
g=cv2.getTrackbarPos("G","image")
b=cv2.getTrackbarPos("B","image")
color=(b,g,r)
global ix,iy,drawing,mode
if event ==cv2.EVENT_LBUTTONDOWN:
drawing=True
ix,iy=x,y
elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:
if drawing==True:
if mode==True:
cv2.rectangle(img,(ix,iy),(x,y),color,-1)
else:
cv2.civcle(img,(x,y),3,color,-1)
elif event==cv2.EVENT_LBUTTONUP:
drawing==False
img=(np.zeros((300,512,3),np.uint8))
#创建一个图像,512x512大小,数据类型无符号8位
cv2.namedWindow("image")
cv2.createTrackbar("R","image",0,255,nothing)
cv2.createTrackbar("G","image",0,255,nothing)
cv2.createTrackbar("B","image",0,255,nothing)
cv2.setMouseCallback("image",draw_circle)
while(1):
cv2.imshow("image",img)
k=cv2.waitKey(1)&0xff
if k==ord("m"):
mode=not mode
elif k==27:
break
标签:plt,img,image,cv2,step,参数,图像,cv,first
From: https://blog.csdn.net/m0_51634066/article/details/142564179