GVKun编程网logo

使用 plt.plot v/s plt.hist [Python] 的彩色图像直方图的差异(python直方图颜色)

3

针对使用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直方图颜色)

使用 plt.plot v/s plt.hist [Python] 的彩色图像直方图的差异(python直方图颜色)

如何解决使用 plt.plot v/s plt.hist [Python] 的彩色图像直方图的差异

我使用下面的代码使用 2 种方法生成彩色图像的直方图:

方法一:-

  1. 使用 cv2.calcHist() 函数计算频率
  2. 使用 plt.plot() 生成频率线图

方法二:-

  1. 使用 plt.hist() 函数计算并生成直方图(我添加了 bin=250 使 2 个直方图保持一致)

观察:两个直方图大致相似。第一个直方图(使用 plt.plot)看起来非常平滑。然而,第二个直方图(使用 plt.hist)有额外的峰值和下降。

问题: 由于图像只有 int 值,因此不应出现不一致的分箱。在直方图 2 中出现这些额外的尖峰和下降的原因是什么?

  1. blue_bricks = cv2.imread(''Computer-Vision-with-Python/DATA/bricks.jpg'')
  2. fig = plt.figure(figsize=(17,10))
  3. color = [''b'',''g'',''r'']
  4. # Histogram Type-1
  5. fig.add_subplot(2,2,1)
  6. for i,c in enumerate(color):
  7. hist = cv2.calcHist([blue_bricks],mask=None,channels=[i],histSize=[256],ranges=[0,256])
  8. plt.plot(hist,color=c)
  9. plt.title(''Histogram-1'')
  10. # Histogram Type-2
  11. fig.add_subplot(2,2)
  12. for i,c in enumerate(color):
  13. plt.hist(blue_bricks[:,:,i].flatten(),color=c,alpha=0.5,bins=250)
  14. plt.title(''Histogram-2'')

enter image description here

解决方法

bins=250 在最低值和最高值之间创建 251 个等距的 bin 边缘。这些与离散值不一致。当最高和最低之间的差值大于 250 时,一些 bin 将是空的。当差值小于 250 时,某些 bin 将获取两个相邻数字的值,从而产生尖峰。此外,在叠加直方图时,所有直方图使用完全相同的 bin 边缘非常方便。

您需要 bin 正好位于整数值之间,设置 bins=np.arange(-0.5,256,1) 可以实现这一点。或者,您可以使用 seaborn 的 histplot(....,discrete=True)

下面是一些数字较小的代码来说明正在发生的事情。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. fig,((ax1,ax2),(ax3,ax4)) = plt.subplots(nrows=2,ncols=2,figsize=(12,3))
  4. for ax in (ax1,ax2,ax3,ax4):
  5. if ax in [ax1,ax3]:
  6. x = np.arange(1,10)
  7. else:
  8. x = np.arange(1,12)
  9. if ax in [ax1,ax2]:
  10. bins = 10
  11. else:
  12. bins = np.arange(0.5,x.max() + 1,1)
  13. _,bin_edges,_ = ax.hist(x,bins=bins,ec=''white'',lw=2)
  14. ax.vlines(bin_edges,2.5,color=''crimson'',ls=''--'')
  15. ax.scatter(x,[2.2] * len(x),color=''lime'',s=50)
  16. ax.set_title((f"{bins} bins" if type(bins) == int else "discrete bins") + f'',{len(x)} values'')
  17. ax.set_xticks(x)
  18. ax.set_yticks([0,1,2])
  19. plt.tight_layout()
  20. plt.show()

histogram with non-aligned bins

.got.plt 和 .plt.got 部分有什么区别?

.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()折线图

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.展示效果==

08.png

(二)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.展示效果==

09.png

(三)颜色控制符

要想使用丰富,炫酷的图标,我们可以使用更复杂的格式设置,主要颜色,线的样式,点的样式。

默认的情况下,只有一条线,是蓝色实线。多条线的情况下,生成不同颜色的实线。

字符 颜色
''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.输出效果==

15.png

(五)点的类型控制符

==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)输出效果:

16.png

==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)输出效果:

17.png

==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)输出效果:

18.png

==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)输出效果:

19.png

==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)输出效果:

20.png

==注:三种控制符可以单独使用,也可以组合使用==

(六)风格使用的另一种方法

==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.输出效果==

21.png

作者:Mark

日期:2019/01/30 周三

4.6Python 数据处理篇之 Matplotlib 系列 (六)---plt.hist () 与 plt.hist2d () 直方图

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 轴是个数

01.png

改:plt.hist (x=x, bins=10, density=True)

y 轴是频率

02.png

(二)双直方图

(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)输出效果:

03.png

作者:Mark

日期:2019/02/13 周三

cv::plot::Plot2d::render bur for cv::plot::Plot2d::create 的未定义引用,一切正常

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 的未定义引用,一切正常的相关知识,请在本站搜索。

本文标签: