1. 图像阈值
ret, dst = cv2.threshold(src, thresh, maxval, type)
src:输入图,只能为单通道图像,通常是灰度图
dst:输出图
thresh:阈值
maxval:当像素值超过了阈值(或小于阈值,根据type来决定),所赋予的值
type:二值化操作类型
type:包含5种类型:cv2.THRESH_BINARY;cv2.THRESH_BINARY_INV;cv2.THRESH_TRUNC;cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV;
cv2.THRESH_BINARY:大于阈值部分取maxval(最大值),否则取0
cv2.THRESH_BINARY_INV:反转
cv2.THRESH_TRUNC:大于阈值部分设为阈值,否则不变(截断)
cv2.THRESH_TOZERO:大于阈值部分不变,否则变0
cv2.THRESH_TOZERO_INV:反转
img_gray = cv.cvtColor(img1, cv.COLOR_BGR2GRAY) ret, thresh1 = cv.threshold(img_gray, 217, 255, cv.THRESH_BINARY) ret, thresh2 = cv.threshold(img_gray, 217, 255, cv.THRESH_BINARY_INV) ret, thresh3 = cv.threshold(img_gray, 217, 255, cv.THRESH_TRUNC) ret, thresh4 = cv.threshold(img_gray, 217, 255, cv.THRESH_TOZERO) ret, thresh5 = cv.threshold(img_gray, 217, 255, cv.THRESH_TOZERO_INV) titles = ["Original image", "BINARY", "BINARY_INV", "TRUNC", "TOZERO", "TOZERO_INV"] images = [img1, thresh1, thresh2, thresh3, thresh4, thresh5] for i in range(6): plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray') plt.title(titles[i]) plt.xticks([]), plt.yticks([]) plt.show()
Matplotlib Pyplot 的常用方法
Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。
绘制曲线 plot()
绘图标记
颜色字符:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,’#008000’ RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。
线型参数:’‐’ 实线,’‐‐’ 破折线,’‐.’ 点划线,’:’ 虚线。
标记字符:’.’ 点标记,’,’ 像素标记(极小点),‘o’ 实心圈标记,‘v’ 倒三角标记,’^’ 上三角标记,’>’ 右三角标记,’<’ 左三角标记…等等。
x = np.array([0, 10, 10]) y = np.array([0, 100, 0]) # plt.plot(x, y, 'r') plt.plot(x, y, 'o') plt.plot(x, y, '--')
_y = np.array([3, 8, 1, 10, 5, 7]) ## x 默认[0, 1, 2, ..., n - 1]
# 在 plt.plot() 参数中包含两对 x,y 值,第一对是 x,y,这对应于正弦函数, # 第二对是 x,z,这对应于余弦函数。 x = np.arange(0, 4 * np.pi, 0.1) # start,stop,step y = np.sin(x) z = np.cos(x) plt.plot(x,y,x,z)
标签和标题
使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签。
使用 title() 方法来设置标题。
提供了 loc 参数来设置标题显示的位置,可以设置为: ‘left’, ‘right’, 和 ‘center’, 默认值为 ‘center’。
x = np.arange(0, 2 * np.pi, 0.2) y = np.sin(x) plt.title('sinx') plt.xlabel('x') plt.ylabel('y') plt.plot(x, y)
绘制网格线 grid()
matplotlib.pyplot.grid(b=None, which=‘major’, axis=‘both’, **kwargs)
b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
which:可选,可选值有 ‘major’、‘minor’ 和 ‘both’,默认为 ‘major’,表示应用更改的网格线。
axis:可选,设置显示哪个方向的网格线,可以是取 ‘both’(默认),‘x’ 或 ‘y’,分别表示两个方向,x 轴方向或 y 轴方向。
**kwargs:可选,设置网格样式,可以是 color=‘r’, linestyle=’-’ 和 linewidth=2,分别表示网格线的颜色,样式和宽度。
plt.grid(axis = 'y', color = 'r', linestyle = '--', linewidth = 0.5)
绘制多图
subplot() 和 subplots() 绘制多个子图。
subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可。
subplot(nrows, ncols, index, **kwargs)
行列,及该图是第index张
#plot 1: x1 = np.array([0, 6]) y1 = np.array([0, 100]) plt.subplot(1, 2, 1) plt.plot(x1, y1) plt.title("plot 1") #plot 2: x2 = np.array([1, 2, 3, 4]) y2 = np.array([1, 4, 9, 16]) plt.subplot(1, 2, 2) plt.plot(x2, y2) plt.title("plot 2") plt.suptitle("subplot Test") plt.show()
subplots() #
绘制散点图
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, …)
x,y:长度相同的数组
s:点的大小,默认 20。可以是个数组,数组每个参数为对应点的大小。
c:点的颜色,默认蓝色 ‘b’。可以是个 RGB 或 RGBA 二维行数组。
marker:点的样式,默认小圆圈 ‘o’。
cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。
# 随机数生成器的种子 np.random.seed(20030121) N = 30 x = np.random.rand(N) y = np.random.rand(N) colors = np.random.rand(N) sizes = (30 * np.random.rand(N))**2 # [0, 900) # np.random.rand() -->> [0, 1) 随机数,服从均匀分布 plt.scatter(x, y, s=sizes, c=colors, cmap='viridis', alpha=0.5) # alpha = 透明度 plt.title("Scatter Test") # 设置标题 plt.colorbar() # 显示颜色条,cmap 默认 'viridis' plt.show()
绘制柱形图
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align=‘center’, data=None, **kwargs)
水平方向:bar()
垂直方向:barh()
x:浮点型数组,柱形图的 x 轴数据
height:浮点型数组,柱形图的高度
width:浮点型数组,柱形图的宽度
bottom:浮点型数组,底座的 y 坐标,默认 0
align:柱形图与 x 坐标的对齐方式,‘center’ 以 x 位置为中心,这是默认值’edge’:将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align=‘edge’
x = np.array(["a", "b", "c", "d"]) y = np.array([12, 22, 6, 18]) plt.subplot(1, 2, 1), plt.title('h'), plt.barh(x, y, color=["#4CAF50","red","hotpink","#556B2F"], height=0.5) plt.subplot(1, 2, 2), plt.title('v'), plt.bar(x, y, color=["#4CAF50","red","hotpink","#556B2F"], width=0.5) plt.suptitle('bar chart') plt.show()
绘制饼图
pie( … )
y = np.array([35, 25, 25, 15]) # 逆时针绘制 plt.pie(y, labels=['A','B','C','D'], # 设置饼图标签 colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色 explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远 autopct='%.2f%%', # 格式化输出百分比 ) plt.title("Pie Test")