Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用plt.plot v/s plt.hist[Python]的彩色图像直方图的差异_Python 3.x_Opencv_Matplotlib_Computer Vision_Opencv Python - Fatal编程技术网

Python 3.x 使用plt.plot v/s plt.hist[Python]的彩色图像直方图的差异

Python 3.x 使用plt.plot v/s plt.hist[Python]的彩色图像直方图的差异,python-3.x,opencv,matplotlib,computer-vision,opencv-python,Python 3.x,Opencv,Matplotlib,Computer Vision,Opencv Python,我使用下面的代码使用两种方法生成彩色图像的直方图: 方法1:- 使用cv2.calcHist()函数计算频率 使用plt.plot()生成频率的线形图 方法2:- 使用plt.hist()函数计算并生成直方图(我添加了bin=250,以便两个直方图保持一致) 观察:两个直方图大致相似。第一个直方图(使用plt.plot)看起来非常平滑。然而,第二个直方图(使用plt.hist)有额外的尖峰和下降 问题:由于图像只有int值,因此不应存在不一致的装箱。直方图-2中出现这些额外峰值和下降的原因是什么

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

方法1:-

  • 使用cv2.calcHist()函数计算频率
  • 使用plt.plot()生成频率的线形图
  • 方法2:-

  • 使用plt.hist()函数计算并生成直方图(我添加了bin=250,以便两个直方图保持一致)
  • 观察:两个直方图大致相似。第一个直方图(使用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,2)
        
        for i,c in enumerate(color):
            plt.hist(blue_bricks[:,:,i].flatten(),color=c, alpha=0.5, bins=250)
        plt.title('Histogram-2')
    

    料仓=250
    在最低值和最高值之间创建251条等间距的料仓边。这些值与离散值不一致。当最高值和最低值之间的差值大于250时,某些箱子将为空。当差值小于250时,一些存储箱将获得两个相邻数字的值,从而产生峰值。此外,当叠加直方图时,所有直方图使用完全相同的箱边是很方便的

    您需要将存储单元精确地设置在整数值之间,设置
    bins=np。arange(-0.5256,1)
    将实现这一点。或者,您可以使用seaborn的
    histplot(..,discrete=True)

    下面是一些数字较小的代码来说明发生了什么

    导入matplotlib.pyplot作为plt
    将numpy作为np导入
    图,((ax1,ax2),(ax3,ax4))=plt.子批(nrows=2,ncols=2,figsize=12,3))
    对于ax-in(ax1、ax2、ax3、ax4):
    如果ax在[ax1,ax3]中:
    x=np.arange(1,10)
    其他:
    x=np.arange(1,12)
    如果ax在[ax1,ax2]中:
    垃圾箱=10
    其他:
    箱子=np.arange(0.5,x.max()+1,1)
    _,bin_边,u=ax.hist(x,bin=bin,ec='white',lw=2)
    ax.vlines(bin_边,0,2.5,color='crimson',ls='--'))
    最大散射(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)}值')
    ax.set_xticks(x)
    ax.set_-yticks([0,1,2])
    plt.紧_布局()
    plt.show()
    

    料仓=250
    在最低值和最高值之间创建251条等间距的料仓边。这些值与离散值不一致。当最高值和最低值之间的差值大于250时,某些箱子将为空。当差值小于250时,一些存储箱将获得两个相邻数字的值,从而产生峰值。此外,当叠加直方图时,所有直方图使用完全相同的箱边是很方便的

    您需要将存储单元精确地设置在整数值之间,设置
    bins=np。arange(-0.5256,1)
    将实现这一点。或者,您可以使用seaborn的
    histplot(..,discrete=True)

    下面是一些数字较小的代码来说明发生了什么

    导入matplotlib.pyplot作为plt
    将numpy作为np导入
    图,((ax1,ax2),(ax3,ax4))=plt.子批(nrows=2,ncols=2,figsize=12,3))
    对于ax-in(ax1、ax2、ax3、ax4):
    如果ax在[ax1,ax3]中:
    x=np.arange(1,10)
    其他:
    x=np.arange(1,12)
    如果ax在[ax1,ax2]中:
    垃圾箱=10
    其他:
    箱子=np.arange(0.5,x.max()+1,1)
    _,bin_边,u=ax.hist(x,bin=bin,ec='white',lw=2)
    ax.vlines(bin_边,0,2.5,color='crimson',ls='--'))
    最大散射(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)}值')
    ax.set_xticks(x)
    ax.set_-yticks([0,1,2])
    plt.紧_布局()
    plt.show()