Opencv 入门(二)上

简介: 笔记

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()

1.png

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, '--')

2.png

_y = np.array([3, 8, 1, 10, 5, 7])
## x 默认[0, 1, 2, ..., n - 1]

3.png

# 在 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) 

4.png

标签和标题

使用 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)


5.png

绘制网格线 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)

6.png

绘制多图

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()


7.png

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()

8.png

绘制柱形图

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()


9.png

绘制饼图

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")

10.png

相关文章
|
7月前
|
计算机视觉 C++
11.【openCV计算机视觉入门基础】
11.【openCV计算机视觉入门基础】
46 0
|
3月前
|
存储 算法 C语言
OpenCV 即时入门(全)
OpenCV 即时入门(全)
83 0
|
4月前
|
机器学习/深度学习 算法 计算机视觉
python入门(六) opencv的安装,图片操作,绘制文字图形,视频操作
python入门(六) opencv的安装,图片操作,绘制文字图形,视频操作
|
4月前
|
存储 XML 计算机视觉
OpenCV 入门之旅
OpenCV 入门之旅
|
4月前
|
计算机视觉 索引 Python
分析”圣诞帽“代码,入门OpenCV
分析”圣诞帽“代码,入门OpenCV
分析”圣诞帽“代码,入门OpenCV
|
8月前
|
存储 Linux 计算机视觉
openCV之图像处理入门
openCV之图像处理入门
|
9月前
|
存储 计算机视觉 C++
【OpenCv】c++ 入门认识 Mat 类,单通道 Mat 的基本操作
【OpenCv】c++ 入门认识 Mat 类,单通道 Mat 的基本操作
186 0
|
10月前
|
计算机视觉 C++ Python
OpenCV入门(C++/Python)- 使用OpenCV进行图像旋转和转换(五)
OpenCV入门(C++/Python)- 使用OpenCV进行图像旋转和转换(五)
195 0
|
10月前
|
存储 C++ 计算机视觉
OpenCV入门(C++/Python)-使用OpenCV裁剪图像(四)
OpenCV入门(C++/Python)-使用OpenCV裁剪图像(四)
321 0
|
10月前
|
机器学习/深度学习 消息中间件 数据可视化
OpenCV入门(C++/Python)- 使用OpenCV调整尺寸大小(三)
OpenCV入门(C++/Python)- 使用OpenCV调整尺寸大小(三)
216 1