针对使用plt.plotv/splt.hist[Python]的彩色图像直方图的差异和python直方图颜色这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.got.plt和.plt.got
针对使用 plt.plot v/s plt.hist [Python] 的彩色图像直方图的差异和python直方图颜色这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.got.plt 和 .plt.got 部分有什么区别?、4.3Python数据处理篇之Matplotlib系列(三)---plt.plot()折线图、4.6Python 数据处理篇之 Matplotlib 系列 (六)---plt.hist () 与 plt.hist2d () 直方图、cv::plot::Plot2d::render bur for cv::plot::Plot2d::create 的未定义引用,一切正常等相关知识,希望可以帮助到你。
本文目录一览:- 使用 plt.plot v/s plt.hist [Python] 的彩色图像直方图的差异(python直方图颜色)
- .got.plt 和 .plt.got 部分有什么区别?
- 4.3Python数据处理篇之Matplotlib系列(三)---plt.plot()折线图
- 4.6Python 数据处理篇之 Matplotlib 系列 (六)---plt.hist () 与 plt.hist2d () 直方图
- cv::plot::Plot2d::render bur for cv::plot::Plot2d::create 的未定义引用,一切正常
使用 plt.plot v/s plt.hist [Python] 的彩色图像直方图的差异(python直方图颜色)
如何解决使用 plt.plot v/s plt.hist [Python] 的彩色图像直方图的差异
我使用下面的代码使用 2 种方法生成彩色图像的直方图:
方法一:-
- 使用 cv2.calcHist() 函数计算频率
- 使用 plt.plot() 生成频率线图
方法二:-
- 使用 plt.hist() 函数计算并生成直方图(我添加了 bin=250 使 2 个直方图保持一致)
观察:两个直方图大致相似。第一个直方图(使用 plt.plot)看起来非常平滑。然而,第二个直方图(使用 plt.hist)有额外的峰值和下降。
问题: 由于图像只有 int 值,因此不应出现不一致的分箱。在直方图 2 中出现这些额外的尖峰和下降的原因是什么?
blue_bricks = cv2.imread(''Computer-Vision-with-Python/DATA/bricks.jpg'')
fig = plt.figure(figsize=(17,10))
color = [''b'',''g'',''r'']
# Histogram Type-1
fig.add_subplot(2,2,1)
for i,c in enumerate(color):
hist = cv2.calcHist([blue_bricks],mask=None,channels=[i],histSize=[256],ranges=[0,256])
plt.plot(hist,color=c)
plt.title(''Histogram-1'')
# Histogram Type-2
fig.add_subplot(2,2)
for i,c in enumerate(color):
plt.hist(blue_bricks[:,:,i].flatten(),color=c,alpha=0.5,bins=250)
plt.title(''Histogram-2'')
解决方法
bins=250
在最低值和最高值之间创建 251 个等距的 bin 边缘。这些与离散值不一致。当最高和最低之间的差值大于 250 时,一些 bin 将是空的。当差值小于 250 时,某些 bin 将获取两个相邻数字的值,从而产生尖峰。此外,在叠加直方图时,所有直方图使用完全相同的 bin 边缘非常方便。
您需要 bin 正好位于整数值之间,设置 bins=np.arange(-0.5,256,1)
可以实现这一点。或者,您可以使用 seaborn 的 histplot(....,discrete=True)
。
下面是一些数字较小的代码来说明正在发生的事情。
import matplotlib.pyplot as plt
import numpy as np
fig,((ax1,ax2),(ax3,ax4)) = plt.subplots(nrows=2,ncols=2,figsize=(12,3))
for ax in (ax1,ax2,ax3,ax4):
if ax in [ax1,ax3]:
x = np.arange(1,10)
else:
x = np.arange(1,12)
if ax in [ax1,ax2]:
bins = 10
else:
bins = np.arange(0.5,x.max() + 1,1)
_,bin_edges,_ = ax.hist(x,bins=bins,ec=''white'',lw=2)
ax.vlines(bin_edges,2.5,color=''crimson'',ls=''--'')
ax.scatter(x,[2.2] * len(x),color=''lime'',s=50)
ax.set_title((f"{bins} bins" if type(bins) == int else "discrete bins") + f'',{len(x)} values'')
ax.set_xticks(x)
ax.set_yticks([0,1,2])
plt.tight_layout()
plt.show()
.got.plt 和 .plt.got 部分有什么区别?
如何解决.got.plt 和 .plt.got 部分有什么区别??
#include <stdio.h>
#include <stdlib.h>
int main(int argc,int *argv[])
{
size_t *p = (size_t *) strtol(argv[1],NULL,16);
p[0] = 0xAAAAAAAA;
printf("RELRO: %p\n",p);
return 0;
}
以上代码编译后带参数gcc -g -Wl,-z,relro -o test test.c
并使用 readelf
列出所有部分,它显示以下部分
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
..........
[23] .got PROGBITS 0000000000403ff0 002ff0 000010 08 WA 0 0 8
+---------+
[24] |.got.plt | PROGBITS 0000000000404000 003000 000028 08 WA 0 0 8
+---------+
..........
并使用参数(无 relro)gcc -Wl,norelro -o test test.c
编译相同的二进制文件并使用 readelf
列出所有部分,它显示以下部分
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
..........
[13] .plt PROGBITS 0000000000001020 001020 000030 10 AX 0 0 16
+---------+
[14] |.plt.got | PROGBITS 0000000000001050 001050 000010 10 AX 0 0 16
+---------+
..........
我怀疑这两个部分 .got.plt 和 .plt.got 有什么区别?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
4.3Python数据处理篇之Matplotlib系列(三)---plt.plot()折线图
[TOC]
前言
陆陆续续接触了些,关于Matplotlib的教材,总是感觉学不到本质的东西。今天就来讲一下 关于
plt.plot()函数的本质。
(一)plt.plot()函数的本质
==1.说明==
plt.plot()函数的本质就是根据点连接线。根据x(数组或者列表) 和 y(数组或者列表)组成点,然后连接成线。
==2.源代码==
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 2, 20, 50]
# 创建一个画布
plt.figure()
# 创建一条线
plt.plot(x, y)
# 展现画布
plt.show()
==3.展示效果==
(二)plt.plot()函数缺省x时
==1.说明==
缺省x的情况下,x的默认值是:range(len(y))
==2.源代码==
import matplotlib.pyplot as plt
# 缺省x参数时,默认的x是range(len(y))
y = [1, 2, 3, 4]
# 创建一个画布
plt.figure()
# 创建一条线
plt.plot(y)
# 展现画布
plt.show()
==3.展示效果==
(三)颜色控制符
要想使用丰富,炫酷的图标,我们可以使用更复杂的格式设置,主要颜色,线的样式,点的样式。
默认的情况下,只有一条线,是蓝色实线。多条线的情况下,生成不同颜色的实线。
字符 | 颜色 |
---|---|
''b'' | blue |
''g'' | green |
''r'' | red |
''c'' | cyan 青色 |
''m'' | magenta平红 |
''y'' | yellow |
''k'' | black |
''w'' | white |
(四)线形控制符
==1.说明==
字符 | 类型 |
---|---|
''-'' | 实线 |
''--'' | 虚线 |
''-.'' | 虚点线 |
'':'' | 点线 |
'' '' | 空类型,不显示线 |
==2.源代码==
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y1 = [1, 2, 3, 4]
y2 = [1, 4, 9, 16]
y3 = [1, 8, 27, 64]
y4 = [1, 16, 81, 124]
# 创建一个画布
plt.figure()
# 在figure下线
plt.plot(x, y1, "-o") #实线
plt.plot(x, y2, "--o") #虚线
plt.plot(x, y3, "-.o") #虚点线
plt.plot(x, y4, ":o") # 点线
# 展现画布
plt.show()
==3.输出效果==
(五)点的类型控制符
==1.普通点类型==
(1)说明:
''.'' | 点 |
---|---|
'','' | 像素点 |
''o'' | 原点 |
(2)源代码
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y1 = [1, 2, 3, 4]
y2 = [1, 4, 9, 16]
y3 = [1, 8, 27, 64]
y4 = [1, 16, 81, 124]
# 创建一个画布
plt.figure()
# 在figure下的线
plt.plot(x, y1, "-.") # 点
plt.plot(x, y2, "-,") # 像素点
plt.plot(x, y3, "-o") # 圆点
# 展现画布
plt.show()
(3)输出效果:
==2.三角点==
(1)说明:
''^'' | 上三角点 |
---|---|
''v'' | 下三角点 |
''<'' | 左三角点 |
''>'' | 右三角点 |
(2)源代码:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y1 = [1, 2, 3, 4]
y2 = [1, 4, 9, 16]
y3 = [1, 8, 27, 64]
y4 = [1, 16, 81, 124]
# 创建一个画布
plt.figure()
# 在figure下的线
plt.plot(x, y1, "-^")
plt.plot(x, y2, "-v")
plt.plot(x, y3, "-<")
plt.plot(x, y4, "->")
# 展现画布
plt.show()
(3)输出效果:
==3.三叉点==
(1)说明:
''1'' | 下三叉点 |
---|---|
''2'' | 上三叉点 |
''3'' | 左三叉点 |
''4'' | 右三叉点 |
(2)源代码:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y1 = [1, 2, 3, 4]
y2 = [1, 4, 9, 16]
y3 = [1, 8, 27, 64]
y4 = [1, 16, 81, 124]
# 创建一个画布
plt.figure()
# 在figure下的线
plt.plot(x, y1, "-1")
plt.plot(x, y2, "-2")
plt.plot(x, y3, "-3")
plt.plot(x, y4, "-4")
# 展现画布
plt.show()
(3)输出效果:
==4.多边形点==
(1)说明:
''s'' | 正方点 |
---|---|
''p'' | 五角点 |
''*'' | 星形点 |
''h'' | 六边形1 |
''H'' | 六边形2 |
(2)源代码:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y1 = [1, 2, 3, 4]
y2 = [1, 4, 9, 16]
y3 = [1, 8, 27, 64]
y4 = [1, 16, 81, 124]
y5 = [1, 64, 100, 180]
# 创建一个画布
plt.figure()
# 在figure下的线
plt.plot(x, y1, "-s")
plt.plot(x, y2, "-p")
plt.plot(x, y3, "-*")
plt.plot(x, y4, "-h")
plt.plot(x, y5, "-H")
# 展现画布
plt.show()
(3)输出效果:
==5.其他形状点==
(1)说明:
''+'' | 加号点 |
---|---|
''x'' | 乘号点 |
''D'' | 实心菱形点 |
''d'' | 细菱形点 |
''_'' | 横线点 |
''|'' | 竖线点 |
(2)源代码:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y1 = [1, 2, 3, 4]
y2 = [1, 4, 9, 16]
y3 = [1, 8, 27, 64]
y4 = [1, 16, 81, 124]
y5 = [1, 64, 100, 180]
# 创建一个画布
plt.figure()
# 在figure下的线
plt.plot(x, y1, "-+")
plt.plot(x, y2, "-x")
plt.plot(x, y3, "-D")
plt.plot(x, y4, "-d")
plt.plot(x, y5, "-_")
# 展现画布
plt.show()
(3)输出效果:
==注:三种控制符可以单独使用,也可以组合使用==
(六)风格使用的另一种方法
==1.说明==
color="green" 指定颜色为绿色
line指定线形为dashed类型
marker="o" 指定标记类型为o点
markerfacecolor="blue"指定标记的颜色为蓝色
markersize=20 指定标记的大小为20
==2.原代码==
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
y1 = x * 1.5
y2 = x * 2.5
y3 = x * 3.5
y4 = x * 4.5
y5 = x * 5.5
plt.plot(x, y1, "-P")
plt.plot(x, y2, "-|")
plt.plot(x, y3, color="#000000")
plt.plot(x, y4, "-o", markersize=20)
plt.plot(x, y5, "-^", markerfacecolor="blue")
plt.show()
==3.输出效果==
作者:Mark
日期:2019/01/30 周三
4.6Python 数据处理篇之 Matplotlib 系列 (六)---plt.hist () 与 plt.hist2d () 直方图
目录
[TOC]
前言
今天我们学习的是直方图,导入的函数是:
plt.hist (x=x, bins=10) 与 plt.hist2D (x=x, y=y)
(一)直方图
(1)说明:
pyplot.``hist
(x, bins=None*, density=None,……**kwargs)
常见的参数属性
具体参考:官网说明文档
属性 | 说明 | 类型 |
---|---|---|
x | 数据 | 数值类型 |
bins | 条形数 | int |
color | 颜色 | "r","g","y","c" |
density | 是否以密度的形式显示 | bool |
range | x 轴的范围 | 数值元组(起,终) |
bottom | y 轴的起始位置 | 数值类型 |
histtype | 线条的类型 | "bar": 方形,"barstacked": 柱形,<br />"step":"未填充线条"<br />"stepfilled":"填充线条" |
align | 对齐方式 | "left": 左,"mid": 中间,"right": 右 |
orientation | orientation | "horizontal": 水平,"vertical": 垂直 |
log | 单位是否以科学计术法 | bool |
(2)源代码:
# 导入模块
import matplotlib.pyplot as plt
import numpy as np
# 数据
mu = 100 # 均值
sigma = 20 # 方差
# 2000个数据
x = mu + sigma*np.random.randn(2000)
# 画图 bins:条形的个数, normed:是否标准化
plt.hist(x=x, bins=10)
# 展示
plt.show()
(3)输出效果:
默认:y 轴是个数
改:plt.hist (x=x, bins=10, density=True)
y 轴是频率
(二)双直方图
(1)说明:
pyplot.``hist2d
(x, y, bins=10, **kwargs)
常见的参数属性
具体参考:官网说明文档
x | x 坐标 |
---|---|
y | y 坐标 |
bins | 横竖分为几条 |
(2)源代码:
# 导入模块
import matplotlib.pyplot as plt
import numpy as np
# 数据
x = np.random.randn(1000)+2
y = np.random.randn(1000)+3
# 画图
plt.hist2d(x=x, y=y, bins=30)
# 展示
plt.show()
(3)输出效果:
作者:Mark
日期:2019/02/13 周三
cv::plot::Plot2d::render bur for cv::plot::Plot2d::create 的未定义引用,一切正常
如何解决cv::plot::Plot2d::render bur for cv::plot::Plot2d::create 的未定义引用,一切正常
我使用 OpenCV 4.5.1 并且我想创建一个绘图,但我收到一个错误:
对 cv::plot::Plot2d::render
的未定义引用
用这样的代码:
Mat plot_img(2,100,CV_8U);
Ptr<plot::Plot2d> plotCOLs;
plotCOLs = plot::Plot2d::create(colX,colY);
plotCOLs -> cv::plot::Plot2d::render(plot_img);
imshow("KM controller",plot_img);
是render函数的问题吗?使用 create
,一切正常。
解决方法
Dan Mašek,是对的。我遵循了来自网络的错误建议。
Mat plot_img(2,100,CV_8U);
Ptr<plot::Plot2d> plotCOLs;
plotCOLs = plot::Plot2d::create(colX,colY);
plotCOLs -> render(plot_img);
imshow("KM controller",plot_img);
但答案有第二部分,我不得不重新编译库,因为此文件中有错误。这就是我在网上寻找答案的原因
今天关于使用 plt.plot v/s plt.hist [Python] 的彩色图像直方图的差异和python直方图颜色的讲解已经结束,谢谢您的阅读,如果想了解更多关于.got.plt 和 .plt.got 部分有什么区别?、4.3Python数据处理篇之Matplotlib系列(三)---plt.plot()折线图、4.6Python 数据处理篇之 Matplotlib 系列 (六)---plt.hist () 与 plt.hist2d () 直方图、cv::plot::Plot2d::render bur for cv::plot::Plot2d::create 的未定义引用,一切正常的相关知识,请在本站搜索。
本文标签: