精华内容
下载资源
问答
  • 绘制图像
    千次阅读
    2022-02-18 22:48:27


    前言

    记录学习opencv中有关图像直方图绘制的方法

    一、图像直方图

    图像直方图是对图像的像素进行统计,不受到图像的旋转和平移等效果。

    图像直方图具有平移不变性、放缩不变性等优点,可以用来查看图像整体的变化形式,比如图像是否过暗、图像像素灰度值主要集中在哪些范围。同时在对数字的识别当中,图像直方图也会发挥显著的作用。

    图像直方图的横轴为图像的灰度值作为横轴,以灰度值的个数和比例作为纵轴去绘制统计图。

    灰度值的分布一般反应了图像的亮暗对比度,可以依据直方图的结果去调增亮暗对比度,并依此调整图像的亮暗程度。

    统计灰度值数目的calcHist()函数原型:

    void calcHist(const Mat * images, int nimages, const int * channels, InputArray mask, OutputArray hist, int dims, const int * histSize, const float ** ranges, bool uniform = true, bool accumulate = false)
    

    images:待统计直方图的图像数组,数组中所有的图像应具有相同的尺寸和数据类型,并且数据类型只能是CV_8U、CV_16U和CV_32F这3种中的一种

    nimages:输入图像的数量

    channels:需要统计的通道索引数组,第一个图像的通道索引从0到images[0].channels()-1

    mask:可选的操作掩码。如果是空矩阵,那么表示图像中所有位置的像素都计入直方图中

    hist:输出的统计直方图结果,是一个dims维度的数组

    dims:需要计算直方图的维度,必须是整数,并且不能大于CV_MAX_DIMS

    hitsSize:存放每个维度直方图的数组的尺寸

    ranges:每个图像通道中灰度值的取值范围

    uniform:直方图是否均匀的标志符,默认状态下为均匀(true)

    accumulate:是否累积统计直方图的,累积为true

    示例程序:

    #include<opencv2\opencv.hpp>  //加载OpenCV4的头文件
    #include<iostream>
    #include<vector>
    using namespace std;
    using namespace cv; //OpenCV命名空间
    
    int main()
    {
    	Mat img = imread("apple.jpg");
    	if (img.empty())
    	{
    		cout << "请确认图像文件名称是否正确" << endl;
    		return -1;
    	}
    	Mat gray;
    	cvtColor(img, gray, COLOR_RGB2GRAY);
    	//设置提取直方图的相关变量
    	Mat hist;  //用于存放直方图计算结果
    	const int channels[1] = { 0 };  //通道索引
    	float inRanges[2] = { 0,255 };
    	const float* ranges[1] = { inRanges };  //像素灰度值范围
    	const int bins[1] = { 256 };  //直方图的维度,其实就是像素灰度值的最大值
    	calcHist(&gray, 1, channels, Mat(), hist, 1, bins, ranges);  //计算图像直方图
    	//准备绘制直方图
    	int hist_w = 512;
    	int hist_h = 400;
    	int width = 2;
    	Mat histImage = Mat::zeros(hist_h, hist_w, CV_8UC3);
    	for (int i = 1; i <= hist.rows; i++)
    	{
    		rectangle(histImage, Point(width*(i - 1), hist_h - 1), Point(width*i - 1, hist_h - cvRound(hist.at<float>(i - 1) / 15)), Scalar(255, 255, 255), -1);
    	}
    	namedWindow("histImage", WINDOW_AUTOSIZE);
    	imshow("histImage", histImage);
    	imshow("gray", gray);
    	waitKey(0);
    	return 0;  //程序结束
    }
    

    histImage:

    apple.img:

    在这里插入图片描述

    参考书籍:Opencv4快速入门

    感谢阅读!也欢迎大家关注小白博主,多多鼓励一下!

    更多相关内容
  • 在PHP中绘制图像的函数非常丰富,包括点、线、各种几何图形等可以想象出来的平面图形,都可以通过PHP中提供的各种画图函数完成。我们在这里介绍一些常用的图像绘制,如果使用我们没有介绍过的函数,可以参考手册实现...
  • Python_绘制图像

    千次阅读 2021-09-08 09:35:16
    1. 绘制图像的三个步骤 2. 绘制英雄和透明图像 3.update 方法的作用

    1. 绘制图像的三个步骤

    介绍一下怎么样把图像文件中保存的图像数据, 绘制到游戏的屏幕上,先明确一下什么是图像文件以及要使用图像文件,第1步应该做什么, 在之前准备项目的时候,在项目中添加了一个images 目录,

    在这个目录下保存有大量的图像文件,

    这些图像文件默认情况下是保存在磁盘上的.

    在开发时,如果想要使用这些图像文件中保存的数据,第1步应该把图像文件中保存的数据加载到内存,譬如现在做一个双击的动作,双击之后可以在屏幕右侧看到图像的内容,

    之所以能够看到图像的内容,是因为双击的动作,会把图像文件中保存的数据加载到内存, 加载之后,才能够看到图像的内容.

    刚刚确认了一下图像文件,默认情况下都是保存在磁盘上的,

    在开发中如果想要使用图像文件中保存的数据,第1步就应该把图像文件中保存的数据加载到内存,这个概念明确之后。接下来看一下在使用pygame开发的时候,怎么样把图像文件中保存的数据绘制到游戏的窗口中.

    要想实现这个目标啊,只需要编写三句代码,

    第1句代码,让pygame的image 模块来调用一下load()方法, load()有加载的意思,传入一个要加载的图像文件路径,

    这个方法就会返回一个加载之后的图像数据.load()方法,负责加载图像的数据.

    那加载之后呢,第2步就使用 游戏屏幕  对象调用一个blit 方法,

    blit  方法需要传入两个参数,第一个参数就是刚刚加载得到的图像数据, 第2个参数呢,可以是一个元组,也可以是一个矩形对象,

    总而言之,第2个参数就是指定在游戏屏幕的什么位置来绘制这个图像,第三步, 绘制之后还不够,如果希望在屏幕上看到最终的绘制结果,还需要调用一个非常重要的方法,需要调用一下pygame.display 这个模块提供的一个update方法,

    update有更新的意思,只有更新了整个屏幕,才能够在屏幕上看到最终的绘制结果,这样就是使用pygame来绘制一张图像的三个步骤。

    那接下来就针对三个步骤来做一个简单的演练,在这个演练中就加载一下背景图像,加载之后把背景图片绘制在(0, 0) 的位置,也就是游戏窗口的左上角,绘制完成调用一下update() 方法来看到最终的显示结果.

    演练目标明确之后,粘贴之后, 就把光标放在第8行,

    要绘制图像,应该在无限循环的上方来绘制,先编写一下注释,目标明确之后,以注释的方式来明确一下绘制背景图像的三个步骤,

     现在123, 3个步骤写完,就先来使用image 模块的load 方法加载一下图像.

    要想使用pygame的image模块,选中load 方法,然后在方法的小括号内部传入要加载的图像名称,先敲一个点表示当前目录,

    图片加载完成.

    同时注意load 方法是有返回结果的, 所以在前面定义一个变量来接收一下,

    图像数据加载完成,可以让屏幕对象bg 来调用blit 方法,就让screen这个对象调用blit 的方法,把刚刚加载的背景图像传递进来,

    然后呢,跟一个逗号, 在逗号后面跟上一个元组,这个元组呢就指定一下在游戏窗口的什么位置来绘制这个背景图像.(0, 0) 是在屏幕的左上角来绘制背景图,现在绘制的动作也做完.

    update 方法是display模块提供的,那现在就用pygame点找到display,直接敲一个update,好1 23, 三个步骤写完, 来运行一下程序,

    现在屏幕上已经可以看到背景图片,

    现在把绘制背景图像的位置改一下,x值写一个100,y值同样也写一个100,

    现在再运行一下,

    再演示一下,最后一句代码.如果让屏幕执行完绘制动作之后,不调用update方法就没有办法在屏幕上看到最终的绘制结果.

    现在就把update的方法注释一下,再来运行一下程序,

     

    游戏启动了,这个黑黑的窗口上并没有任何的内容.这样就是不调用update方法看到的一个结果.

    把这个方法的注释打开,重新运行一下程序.

    然后选择停止所有.

     选择停止之后, 

     

    重新运行一下程序, 程序启动了, 并且可以看到背景图片的绘制,

     

    2. 绘制英雄和透明图像

    接下来再针对绘制的图像在做一个案例演练,来把英雄的图像画在屏幕上,通过这个案例演练,首先要强化一下上一小节学习的加载图像以及绘制图像的代码,并且介绍一下什么叫做透明图像.

     

    明确了演练目标之后,来看一下演练步骤,在这一小节,首先从me1.png 这个图像文件来加载一下飞机的数据,当把飞机的数据加载完成之后,就把英雄的飞机挂在屏幕的水平方向,200的位置,垂直方向500的位置.

     

    当让screen对象调用了blit 方法,

     

    完成了绘制之后,还需要调一下display模块提供的update的方法,

     

    只有调用了update 方法,才能够在屏幕上看到最终绘制的结果, 也就是英雄的飞机.

    做一下演练,首先来找到image的文件夹,

     

    来看看在这一小节要绘制的英雄图片,

     

    找到并双击,

     

    这些小格子就是图片的透明区域,至于透明区域会看到什么效果,等下编写完代码,就可以一目了然了.

    再找到我们上一小节完成的代码, CTRL a选中, CTRL c复制,然后切换到一个全新的空白文件CTRL v粘贴进来.

     

    把光标放在第16行, 注意要想绘制飞机的图片,就应该在无限循环的上方来编写代码.

    先增加一个单行注释, 来明确一下这一小节要绘制的目标英雄的飞机,目标明确之后,要想在屏幕上绘制一个图像,第1步应该加载图像,

     

    那现在先给英雄起个名字hero,然后呢使用pygame 模块来调用load 方法,load 方法的参数就是要加载图像文件的完整路径,

     

    那现在写一个点, 表示当前路径,

     

    然后呢跟上images表示图像目录下的,

     

    然后呢再跟上me1.png 这个图像文件名,

     

    图像数据加载完成,接下来让screen 这个对象来调用blit 方法,

     

    blit 方法可以接收两参数,第1个参数就是刚刚加载的图像数据,就把hero传递过来,

     

    第2个参数是一个元组,这个元组的第1个数值是水平方向的坐标,元组的第2个数值是垂直方向的坐标,现在指定一个200和500,

     

    让屏幕对象执行了blit 方法之后, 还需要调用一下display这个模块提供的update方法.

    调一下update方法,

     

    好三句代码写完, 先来运行一下程序,看看英雄的飞机能不能出现在屏幕上.

    英雄的飞机已经出现在屏幕上,

     

    下方是一个背景图片,上方有一个英雄的小飞机.

    现在英雄的飞机已经出现了,如果希望英雄出现的位置向左偏一点,应该修改第1个数值,第1个数值表示水平方向的x值.

    那现在就把程序停止一下,

     

     

    然后把水平的200修改成150,现在再运行一下程序, 英雄的小飞机位置发生变化了,

     

    观察一下英雄飞机下方有一个陨石,但是陨石并没有被小飞机全部遮挡住,有一半的陨石能够透露出来, 这个就是透明图片的效果.

    再看一下要加载的图像,在图像上有一些灰色的小格子,这些灰色的小格子就是透明区域,

     

    在显示图像时,如果下方有其他的图像内容,这些透明的小格子, 就会把其他的图像内容通过小格子透露出来, 同样也可以让我们肉眼看到.这个就是透明图像的概念.

    所谓透明图像,就是png 这种格式是支持透明的,在显示的时候,如果下方已经有内容就会透过透明区域显示出来,这样呢就可以看到两张图片完全融合的效果.

    譬如小飞机叠在陨石上,这个就是透明图片的效果.

     

    3.update 方法的作用

    介绍一下display模块提供的update方法的作用,要想绘制图像, 就让screen 对象来调一下blit 方法.

     

     要想看到绘制的结果,就调用一下display模块提供的update的方法.

    一个绘制图像,一个更新显示,那现在试想一下,假设开发的游戏,需要绘制非常非常多的图像.

    那么在编写代码的时候,如果每绘制一张图像就调用一次update 方法,每绘制一张图像就更新一下显示,如果这样编写代码就显得太繁琐了.

    有更简单的方法.

    其实在开发时可以让screen 对象完成了所有blit 方法之后,即完成所有绘制方法之后,再最后统一调一次update的方法,同样可以在屏幕上看到最终的绘制结果.

     

    验证一下,先把绘制背景的注释删除一下,这样呢可以让代码看起来更加直观一些,

     

    大家看在第3行初始化了一下pygame,

     

    第6行调用set_mode方法,创建了一个游戏的屏幕,

    然后呢,连续的三句代码是非常类似的,

     

    先来加载图像,

     

    然后绘制图像,

     

     

    紧接着更新显示,

     

    更新显示可以在屏幕对象完成所有绘制动作之后统一调用.

    增加一个注释, 可以在所有绘制工作完成之后统一调用update方法,

     

    update 方法会把screen 对象中最终的绘制结果统一输出到屏幕上来.

    既然如此,第11行这个更新显示的代码就可以注释掉了.

    把第11行代码注释一下, 来运行一下程序,

     

    看看背景图像和英雄的飞机能不能被最终的显示在屏幕上来,现在运行一下程序,背景图片也好,英雄的飞机也好,都能够显示在屏幕上,

     

    这个就是在开发时,可以先让screen 对象顺序调用blit 方法,按照程序的需求,在不同的位置绘制不同的图像,当所有绘制工作完成之后,最后统一调一次update的方法.

     

    这种方式编写代码, 就不用在每次绘制完图像都调用一次更新.

    只需要在最后统一调一次update的方法就可以.

    为什么update 方法只需要用一次就可以了呢?之前介绍set_mode方法的时候,提到过,暂时可以把screen 对象理解成游戏的屏幕,其实啊,screen 对象本质上是一个内存中的屏幕的数据对象,

     

    它只是一个数据对象,可以把screen 对象理解成一个油画的画布,画一个示意图,现在这个红色的框框,就是screen 这个对象,

     

    可以在screen 对象上调用blit 方法,就可以完成图像的绘制工作.

    先来画一个英雄的飞机,

     

    画完英雄的飞机之后,如果还希望画一个敌人的飞机,那么就可以使用blit 方法, 再画一个敌人的飞机,

     

    如果游戏中的图像比较多,非常有可能出现几张图像之间彼此覆盖彼此重叠的情况,

     

    但是不管有多少张图像,彼此覆盖和重叠,最终看到的结果只是一个而已.

    让screen 对象调用blit 方法,可以在内存中进行虚拟的绘制,把需要展现的所有图像全部绘制完成,紧接着呢,就调一下update方法, update 方法会把screen 对象中绘制的最终结果,一次性的绘制到游戏屏幕上.

    screen 对象只是一个内存中的数据对象,而最终要在屏幕上看到的结果是通过update 方法把screen 对象的最终结果,一次性的画在屏幕上, 这种方式可以提高屏幕的绘制效率, 可以提高屏幕每次更新的效率,从而呢可以提高游戏的流畅度.

    展开全文
  • 绘制图像 使用 drawimage) 方法绘制图像绘图环境提供了该方法的三个不同版本 drawimage(image,x,y) 在 canvas 中(x,y) 处绘制图片 drawimage(image,x,y,width,height) 在 canvas 中(x,y) 处绘制图片并将其缩放到...
  • MATLAB绘制图像频谱程序

    热门讨论 2012-07-03 23:19:24
    MATLAB绘制图像频谱程序,可以绘制出选中图片的二维频谱图。本人使用MATLAB7.0b
  • Canvas饼状图、绘制文字、绘制图像
  • 该程序可以通过控制鼠标在MS Paint(或任何其他类似的图形编辑器)上绘制图像。 这只能绘制二进制颜色的图像,并且绘制时所有图像都将转换为二进制图像。 该项目的灵感来自r / Python Paint-it图像:“ Pepe the ...
  • Winfrom绘制图像附加日期效果,完整源码,含部分注释,有问题可留言,欢迎下载使用,100%正常运行!
  • Matlab绘制图像(plot函数)

    万次阅读 多人点赞 2020-01-11 13:15:04
    Matlab使用plot函数绘制图像

    Matlab使用 plot函数 绘制图像。

    1. 语法

    语法说明
    plot(X, Y)创建 Y 中数据对 X 中对应值的二维线图。
    如果 X 和 Y 都是向量,则它们的长度必须相同。plot 函数绘制 Y 对 X 的图。
    如果 X 和 Y 均为矩阵,则它们的大小必须相同。plot 函数绘制 Y 的列对 X 的列的图。
    如果 X 或 Y 中的一个是向量而另一个是矩阵,则矩阵的各维中必须有一维与向量的长度相等。
    如果矩阵的行数等于向量长度,则 plot 函数绘制矩阵中的每一列对向量的图。
    如果矩阵的列数等于向量长度,则该函数绘制矩阵中的每一行对向量的图。
    如果矩阵为方阵,则该函数绘制每一列对向量的图。
    如果 X 或 Y 之一为标量,而另一个为标量或向量,则 plot 函数会绘制离散点。但是,要查看这些点,必须指定标记符号,例如 plot(X,Y,‘o’)。
    plot(X, Y, LineSpec)设置线型、标记符号和颜色。
    plot(X1, Y1, …, Xn, Yn)绘制多个 X、Y 对组的图,所有线条都使用相同的坐标区。
    plot(X1, Y1, LineSpec1, …, Xn, Yn, LineSpecn)设置每个线条的线型、标记符号和颜色。您可以混用 X、Y、LineSpec 三元组和 X、Y 对组:
    例如,plot(X1, Y1, X2, Y2, LineSpec2, X3, Y3)。
    plot(Y)创建 Y 中数据对每个值索引的二维线图。
    如果 Y 是向量,x 轴的刻度范围是从 1 至 length(Y)。
    如果 Y 是矩阵,则 plot 函数绘制 Y 中各列对其行号的图。x 轴的刻度范围是从 1 到 Y 的行数。
    如果 Y 是复数,则 plot 函数绘制 Y 的虚部对 Y 的实部的图,使得 plot(Y) 等效于 plot(real(Y), imag(Y))。
    plot(Y, LineSpec)设置线型、标记符号和颜色。
    plot(___, Name, Value)使用一个或多个 Name, Value 对组参数指定线条属性。
    有关属性列表,请参阅 Line 属性
    可以将此选项与前面语法中的任何输入参数组合一起使用。
    名称-值对组设置将应用于绘制的所有线条。
    plot(ax, ___)将在由 ax 指定的坐标区中,而不是在当前坐标区 (gca) 中创建线条。
    选项 ax 可以位于前面的语法中的任何输入参数组合之前。
    h = plot(___)返回由图形线条对象组成的列向量。在创建特定的图形线条后,可以使用 h 修改其属性。有关属性列表,请参阅 Line 属性

    2. 示例

    2.1 绘制线图
    x = -2 : 0.02 : 2;
    y = x .^ 2;
    plot(x, y);
    

    在这里插入图片描述

    2.2 绘制多线条
    x = -2 : 0.02 : 2;
    y1 = x .^ 2;
    y2 = 4 - x .^ 2;
    plot(x, y1, x, y2);
    

    在这里插入图片描述

    2.3 根据矩阵作线图
    Y = [16 2 3 13; 5 11 10 8; 9 7 6 12];
    plot(Y);
    

    在这里插入图片描述

    2.4 设置线型
    线型说明线型说明
    -实线(默认)虚线
    :点线-.点划线
    x = -2 : 0.02 : 2;
    y1 = x .^ 2;
    y2 = 4 - x .^ 2;
    y3 = x + 2;
    plot(x, y1, x, y2, '--', x, y3, ':');
    

    在这里插入图片描述

    2.5 设置线型、颜色和标记

    线型、标记和颜色,指定为包含符号的字符向量或字符串。符号可以按任意顺序显示。您不需要同时指定所有三个特征(线型、标记和颜色)。例如,如果忽略线型,只指定标记,则绘图只显示标记,不显示线条。

    示例: ‘–or’ 是带有圆形标记的红色虚线

    线型说明详见 2.4节。

    标记说明标记说明
    o圆圈+加号
    *星号.
    x叉号s方形
    d菱形^上三角
    v下三角>右三角
    <左三角p五角形
    h六角形
    颜色说明颜色说明
    y黄色m品红色
    c青蓝色r红色
    g绿色b蓝色
    w白色k黑色
    x = -2 : 0.2 : 2;
    y1 = x .^ 2;
    y2 = 4 - x .^ 2;
    y3 = x + 2;
    plot(x, y1, 'g', x, y2, 'b--o', x, y3, 'c*');
    

    在这里插入图片描述

    2.6 设置线宽、标记大小和标记颜色
    x = -2 : 0.2 : 2;
    y = x .^ 2;
    plot(x, y, '--gs', ...
        'LineWidth',2, ...
        'MarkerSize', 5, ...
        'MarkerEdgeColor', 'b', ...
        'MarkerFaceColor',[1, 0, 0]);
    

    在这里插入图片描述

    2.7 添加标题和轴标签
    x = -2 : 0.2 : 2;
    y = x .^ 2;
    plot(x, y);
    title('2-D Line Plot')
    xlabel('x')
    ylabel('x^2');
    

    在这里插入图片描述

    2.8 指定折线图的子图
    x = linspace(-2, 2);
    ax1 = subplot(2, 1, 1);
    y1 = x .^ 2;
    plot(ax1, x, y1);
    title(ax1,'Top Subplot');
    ylabel(ax1, 'x^2');
    
    ax2 = subplot(2, 1, 2);
    y2 = 4 - x .^ 2;
    plot(ax2, x, y2);
    title(ax2, 'Bottom Subplot');
    ylabel(ax2, '4 - x^2');
    

    在这里插入图片描述

    展开全文
  • 今天小编就为大家分享一篇使用Pandas的Series方法绘制图像教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 不使用imhist绘制灰度直方图,可以自己定义bins的数目
  • 主要介绍了HTML5使用drawImage()方法绘制图像,绘图环境提供了该方法的三个不同版本,可以根据需求选择,另附原图素材
  • 图像灰度分布可视化方法总结

            今天在实现图像阈值分割的时候,需要找到能将背景与物体区分开的灰度阈值,因为处理到的图像比较简单,它的直方图具有一个十分明显的特点,也就是它的直方图以双峰一谷的形式呈现,将物体与背景区分开来的阈值也就是谷所对应的阈值,利用数学概念解释一下,双峰就对应着两个极大值,谷对应着极小值,也就是在两个极大值之间找到这个最小值,当然也可以通过统计一下图像灰度值的分布,将灰度值分布以可视化的方式呈现,然后找到合适的阈值,这比排序找极小值的效率快很多,在这里我将介绍三种将灰度分布可视化的方式。

            方法一————利用matplotlib库中的hist()函数

    matplotlib.pyplot.hist(xbins=Nonerange=Nonedensity=Falseweights=Nonecumulative=Falsebottom=Nonehisttype='bar'align='mid'orientation='vertical'rwidth=Nonelog=Falsecolor=Nonelabel=Nonestacked=False*data=None**kwargs)

    一般只定义前面三个参数:

    x: 输入的数据

    bins:如果bins输入的是一个整数,那么它代表着在输出的图像中,横坐标被均分为多少份

    range:它定义了横坐标的范围,输入的是存储了两个数的列表,左边的数是横坐标起点,右边的数是横坐标截止点

    这个函数输出的最终结果,是显示每一个灰度值,以及其对应的频率的连续图 

            方法二————利用opencv中的calcHist函数

    cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) 

     image:需要被统计灰度值分布的图像,有一个血的教训,image一定要用[]框住

    channels:图像通道,对于一个BGR图像, [0], [1],[2]分别对于B,G,R三个通道

    mask:一般默认其为None即可

    histSize:定义了直方图横坐标范围

    ranges:定义了横坐标被分为多少份

            方法三————利用PLotly进行可视化绘图

    Plotly生成的图表是交互式的,也就是说当你用鼠标指向对应的一个灰度值时,他会直接显示这个灰度值的频率,但是耗时比较长,应为他需要用程序计算出每个灰度值对应的频数是多少。

            在这里主要用到了:

            Bar函数,来存储输入数据的横纵坐标

            Layout函数,用来定义函数的标题,横纵坐标

            offline.plot, 最终的绘图

    三种方法的实现过程总程序如下:

    import cv2
    import matplotlib.pyplot as plt
    from plotly import offline
    from  plotly.graph_objs import Bar, Layout
    img_source = cv2.imread('C:\\Users\\yu\\Desktop\\picture_csdn\\cells_segmentation.jpg', cv2.IMREAD_COLOR)
    img_gray = cv2.cvtColor(img_source, cv2.COLOR_BGR2GRAY)
    cv2.imshow('img_gray', img_gray)
    #   方法二————利用opencv中的calcHist函数
    img_hist = cv2.calcHist([img_gray], [0], None, [256], [0, 256])
    plt.plot(img_hist, color='blue')
    plt.show()
    #   方法一————利用matplotlib库中的hist()函数
    plt.hist(img_gray.ravel(), 256, [0, 256])#ravel函数功能是将多维数组降为一维数组
    plt.show()
    ret, img_segmentation = cv2.threshold(img_gray, 80, 255, cv2.THRESH_TRUNC)#    对图像进行阈值分割
    cv2.imshow('img_segmentation', img_segmentation)#    图像分割结果
    #    方法三————利用PLotly进行可视化绘图
    a_input = list(img_gray.ravel())
    frequencies = []
    for value in list(range(0, 256)):
        print(value)
        frequency = a_input.count(value)
        frequencies.append(frequency)
    #   对结果可视化
    x_values = list(range(0, 256))
    data = [Bar(x=x_values, y=frequencies)]
    x_axis_config = {'title': '灰度值'}
    y_axis_config = {'title': '灰度值的频率'}
    my_layout = Layout(title='一个图像的灰度直方图', xaxis=x_axis_config, yaxis=y_axis_config)
    offline.plot({'data': data, 'layout': my_layout}, filename='gray_histogram.html')
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

       在上面的程序中,附带了一个我对图像进行阈值分割的两条代码,读者在使用程序的时候可以将其注释掉。

    在这里我统计的图像是一个将彩色图像转化为灰度图像的细胞图像:

     三种灰度直方分布结果如下所示:

    方法一

    方法二

    方法三

    展开全文
  • 主要介绍了python使用PyGame绘制图像并保存为图片文件的方法,涉及Python使用PyGame操作图片的相关技巧,需要的朋友可以参考下
  • 【新星计划】MATLAB plot绘制图像

    千次阅读 2021-06-14 15:11:31
    在MATLAB中绘制函数图形的步骤如下: 先定义变量 x,通过指定的变量 x 值的范围,该函数被绘制; 然后定义函数, y = f(x); 最后调用 plot 命令,如 plot(x, y)。 接下来我们通过例子绘制简单的...
  • 中文PhotoshopCS图像处理绘制图像PPT学习教案.pptx
  • 该文档是使用matlab绘制图像热度图,colormap也可以有多种选项,可以根据需要选择不同模式下的热度图
  • 第05章PhotoshopCS5 绘制图像.zip,第05章 绘制图像,5.4 案例3——使用【历史记录艺术画笔工具】.avi,5.2 案例1——使用【画笔工具】绘制梦幻背景.avi,5.3 案例2——使用【铅笔工具】绘制QQ表情.avi,5.6 案例5——...
  • python写一个绘制图像直方图和累计直方图的函数
  • 使用plt绘制图像

    千次阅读 2021-04-15 11:17:51
    # 数据点标红 plt.plot(y, 'ro') # 绘制 plt.show() 示例: 注意:使用二维数组作为输出时,numpy数组可以使用切片操作,list切片会报错 import matplotlib.pyplot as plt import random import numpy as np y = np....
  • MATLAB小技巧(1)绘制图像能量图

    千次阅读 2022-04-18 00:47:45
    MATLAB小技巧(1)绘制图像能量图前言一. MATLAB仿真二. 仿真结果三. 小结 前言 MATLAB进行图像处理相关的学习是非常友好的,可以从零开始,对基础的图像处理都已经有了封装好的许多可直接调用的函数,这个系列文章...
  • 如果你需要在DOS下绘制图像,这个就是啦!
  • opencv无敌自学第七天绘制图像和文字.rtf
  • 内容:绘制图像轮廓(边缘) import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 封装图片显示函数 def image_show(image): if image.ndim == 2: plt.imshow(image, cmap='gray') else:...
  • opengl学习笔记:绘制图像

    千次阅读 2021-02-04 11:36:18
    参考:从显示一张图片开始学习OpenGL ES
  • 计算机后端-PHP最佳开发入门实战课程10-04 绘制图像.mp4
  • 2、 编程实现统计给定一副图像的直方图并绘制,要求不能使用Matlab提供的直方图统计函数(hist()函数); 3、 编程实现图像的Arnold变换。 实验内容: 编程实现以下要求: 1、 编程实现一幅图像的直方图并绘制; 2...
  • python用法PyGame绘制图像并保存为图片文件的方法_.docx

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 256,264
精华内容 102,505
关键字:

绘制图像

友情链接: Site_Hunter.rar