-
2019-10-04 10:48:40
gnuplot
http://stahlke.org/dan/gnuplot-iostream/
git clone https://github.com/dstahlke/gnuplot-iostream.gitplplot
https://plplot.sourceforge.net
vcpkg 已经包含这个包了。可以直接 vcpkg install plplotdislin
https://www.mps.mpg.de/dislin 商业用途需付费。
vtk
https://www.vtk.org/ 3D 功能很强,也可以用来画普通的 2D 函数图像。
vcpkg 已经包含这个包了。可以直接 vcpkg install vtkDPlot Jr
https://www.dplot.com/software-developers.htm
MathGL
https://sourceforge.net/projects/mathgl/
PGPlot
http://www.astro.caltech.edu/~tjp/pgplot/
下面几个是 qt 相关的。
Qwt、QwtPolar、QwtPlot3D
https://qwt.sourceforge.io/
http://qwtpolar.sourceforge.net/
http://qwtplot3d.sourceforge.net/QCustomPlot
http://www.qcustomplot.com/
最后2个是 wxWidgets 上的。
istiChartLib
https://firagiel.com/web/technical-software/istichartlib/
wxFreeChart
http://wxcode.sourceforge.net/components/freechart/
更多相关内容 -
用C++实现数学函数图形绘制.doc
2021-12-04 19:22:07用C++实现数学函数图形绘制.doc -
C++画数学函数图象
2013-02-05 21:08:321. vs2008里弄了一个画数学函数的类,基本的函数都可以画,当然复杂的也可以,只是函数本身需要调用者设计,已经变量的范围 2. 最后的图象提供两种方式输出,一个是bmp文件,一个是gif图象,gif需要注意它的256种... -
c++ 绘制函数图像_使用Matlab测量图像目标尺寸
2020-11-07 04:57:35在传统的数字图像处理当中,边缘检测与形态学为两门非常重要的技术,在笔者的第一篇文章中已经重点介绍了各种边缘检测算子,因此这次笔者将结合一些较为简单的形态学算法,使用Matlab为大家介绍一个很有意思的测量...在传统的数字图像处理当中,边缘检测与形态学为两门非常重要的技术,在笔者的第一篇文章中已经重点介绍了各种边缘检测算子,因此这次笔者将结合一些较为简单的形态学算法,使用Matlab为大家介绍一个很有意思的测量目标尺寸的小项目,效果如下
图1 效果图 1.测距原理
在数字图像处理当中我们可知,在计算机眼中,每一张图片都实际上表现为一个庞大的矩阵,若在不知道测距物体距离的情况下,是不可能对图像中物体进行大小(size)的测量计算的,因此我们需要引入一个和比例尺类似的概念:pixels per metric ratio
意为给定度量单位的像素比率,在本篇文章中我们将给点度量单位设定为英寸(inch),可以理解为参考物的作用`,给定图像中一参考物大小,便可测得其它目标物体的尺寸大小
其中,参考物需要有两个重要性质:
性质1:参考物尺寸
我们应该知道物体的尺寸(就是宽或高)包括测量的单位(如mm、英寸等)
性质2:易于识别
我们应该能够很容易地在图片中找到参照物体,无论是基于物体的位置(例如,参考物体总是放在图片的左上角)还是通过外观(例如,独特的颜色或形状,不同与图片中的其他物体)。无论是哪种情况,我们的参照物都应该以某种方式具有唯一的可识别性。
在本篇文章中,我们将硬币作为我们的参考物,已知其尺寸大小为1 inch*1 inch,并且为满足性质2,我们确保其始终置于图像最左侧
图2 测距原理 因此我们得到给定度量单位像素比例计算公式:
pixels per metric ratio = 硬币像素数/物体实际尺寸
已知硬币长宽均为1英寸,假设其在图像中像素宽为157px(基于其关联的检测框),得:
pixels per metric ratio = 157px/1.000in = 157px/in
通过使用这一比例,我们便可计算图像中其它物体的尺寸大小信息了
2.利用计算机视觉测量物体的大小
现在我们理解了pixels per metric ratio比率的含义,但我们还需要对目标进行检测进行检测框长宽的提取,这一步我们将用到诸如灰度图变换、边缘检测、形态学等算法
首先我们定义硬币长宽,并且读取原始图像
coin_width
图3 原始图像 之后我们使用rgb2gray(image)函数进行灰度图转换,并且通过imfilter(f, w,boundary_options)函数对图像进行高斯滤波,其中w为滤波器,由fspecial(type,parameters,sigma)生成,其中将type设为"gaussian",sigma设为1,代码及效果如下
%转换为灰度图像
图4 高斯图像 对高斯滤波后的图像进行Canny边缘检测,使用edge(I,method,threshold),,其中I为输入图像,method为指定算法,文章中使用"canny"进行边缘检测,而threshold为阈值,通常设为0.1,具体想了解各边缘检测算法详解请看这篇文章
Rustle:数字图像图像处理:边缘检测(Edge detection)zhuanlan.zhihu.com边缘检测代码及效果如下所示
I3
图5 Canny边缘检测图像 通过观察边缘图像可以发现各目标内部还具有较细的纹理,对后续八连通区域的检测造成较大干扰,因此我们可以通过孔洞填充操作去除内部纹理,其次提取孔洞填充图像外围边缘,最后使用形态学算法去除较小物体,具体代码如下:
% 孔洞填充
其中bwperim函数与传统的边缘检测概念不同,边缘检测为提取图像边缘特征图像,而bwperim只保留目标最外层边缘,bwareaopen(I4,150)意为去除图像中小于150px的八连通区域(至于为什么选择150,emmmm笔者是把它当成参数直接人为调的哈)
最后效果如下:
图6 孔洞填充图像 图7 提取外围边缘 图8 去除小物体 至此,我们便完成了对图像的处理阶段,接下来我们需要对物体进行标记,并且绘制相关的检测框图,其中我们使用 [labelpic,num] = bwlabel(I5,8)来对图像从左至右对目标进行标记,并配合find函数进行特定目标的操作,如接下来我们需要计算pixels per metric ratio,我们需要将最左边硬币目标提取出来,我们可以使用以下代码进行提取
[
其中r,c分别为目标对象(coin)的八连通行列坐标,然后我们使用函数minboundrect(c,r,'p')将得到的r,c进行最小外接矩形的计算,其中参数p表示按边长最小原则进行计算,最后使用minboxing()函数计算最小外接矩形的长宽,具体代码如下:
% 获取标记物体最小外接矩形坐标点
计算pixels per metric ratio:
% 单位英寸像素点比例计算
其中minboundrect与minboxing函数并不是Matlab官方函数,具体代码会在文末给出
我们使用同样的原理进行各目标最小外接矩形的计算,并使用line函数在图像中绘制出矩形框与中点连线
for
最后,我们根据pixels per metric ratio与最小外接矩形长宽计算目标实际尺寸,并通过text函数在图像中进行显示,代码如下:
line
好了现在我们完成了所有工作,最终的效果图便是这样啦
图9 效果图 最后在放两个动图让大家看看效果吧
图10 效果演示 图11 效果演示 如上图所示,我们已经成功的计算出图片中每个物体的尺寸
然而,并非所有的结果都是完美的,可能的原因:
- 拍摄的角度并非是一个完美的90°俯视。如果不是90°拍摄,物体的尺寸可能会出现扭曲
- 没有使用相机内在和外在参数来校准。当无法确定这些参数时,照片很容易发生径向和切向的透镜变形。执行额外的校准步骤来找到这些参数可以消除图片中的失真并得到更好的物体大小的近似值
参考
1.Measuring size of objects in an image with OpenCV
代码如下:
coin_width
minboundrect函数
function
minboxing函数
function
码字不易,各位看官点个赞再走呀嘻嘻嘻
-
python绘制函数图像
2019-01-23 20:19:43python绘制函数图像代码,NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它... -
mfc绘制数学函数图像
2020-07-18 22:52:491)可绘制常见的数学函数曲线,如三角函数、指数函数、幂函数等。 2)通过菜单选择不同的函数曲线类型,可以通过对话框指定该函数的参数,如Xa中的幂a的具体设置,sin(ax+b)中的参数a、b的设置。 3)绘制数学曲线时... -
c++ 绘制函数图像_MATLAB图像处理之图像增强一
2020-11-20 08:15:16下面就是正文:经图像信息输入系统获取的原图像中通常都含有各种各样的噪声和畸变,大大影响了图像的质量。因此,在对图像进行分析之前,必须先对图像质量进行改善。通常,采用图像增强的方法对图像质量进行改善。...前面时间因为一些事没更像,国庆节本猿终于有时间闲下来写点文章了。下面就是正文:
经图像信息输入系统获取的原图像中通常都含有各种各样的噪声和畸变,大大影响了图像的质量。因此,在对图像进行分析之前,必须先对图像质量进行改善。通常,采用图像增强的方法对图像质量进行改善。图像增强不会考虑引起图像质量下降的原因,而是将图像中感兴趣的特征有选择地突出,并衰减不需要的特征。图像增强的目的是为了改善图像的视觉效果,提高图像的清晰度和工艺的适应性,以及便于人与计算机的分析主处理,以满足图像复制或再现的要求。
图像增强的方法分为空域法和频域法两类。
1.频域法就是我们前面讲的在图像的某个变换域内对整个图像进行操作,对图像进行滤波等处理,并修改变换后的系数,如傅里叶变换、DCT变换等的系数,然后再进行反变换,便可得到处理后的图像。
2.空域法就是我们前面讲的对图像中的各个像素点进行操作,这就是这部分我们要讲述的内容。
一,灰度变换增强基础
我们先介绍一些灰度变换增强的基础知识
1.像素的选择函数
impixel 函数,作用是获取图像的像素值,基本语法如下:
p=impixel(I) 用鼠标在图像上选取所点击图像处的像素值 p=impixel(I,c,r); c r表示指定位置的索取像素的位置
当在脚本编辑器中输入以下内容并运行时
I=imread('mm.jpg'); p=impixel(I)
我们注意到,在显示的图像上,鼠标的图标会变成空心十字,当我们去点击图像上的某一个像素点,选择完毕后按enter键,函数将会返回被选图像的函数数据,如下:
p = 72 24 22
2.线段上像素分布的绘制
同样的 improfile 函数的作用是创建图像强度曲线 ,基本语法如下:
c=improfile(n) 在当前图像上,使用鼠标进行选择n个像素点,按enter键可以返回像素的强度曲线 c=improfile(I,xi yi) 创建指定线段的像素强速曲线,向量xi yi指定线段的端点 [cx cy c]=improfiel(I,)返回鼠标指定线段上的像素点坐标以及像素值
运行如下代码:
I=imread('a1.jpg'); imshow(I) improfile
待鼠标变为十字之后,选择一个线段端点,延长直线,选择另一个线段端点,按enter键,即可生成线段灰度值的分布图。
3.图像等高线
我们用imcontour函数来显示图像的等高线。
运行如下代码
J = imread('ll.png'); I=rgb2gray(J); imshow(I) figure; imcontour(I);
下面是原图和效果
需要注意的是,imcontour函数处理的对象需要先转化为二维的灰度图,再求等高线图。
4.统计概要
此外 ,还可以使用图像处理工具箱中的mean2O函数、sd20函数和 cor20数,对图像的标准统计特性进行计算。
mean2:计算矩阵元素的平均值
std2:计算矩阵的标准偏差
corr2:计算两个矩阵的相关系数
这几个函数就留给大家自行学习,再发一下matlab官网网址,输入对应的函数,就可以直接进行学习了。
二,直接灰度变换
1.灰度线性变换
程序示例:
J=imread('F.jpg'); I=rgb2gray(J); colormap;imshow(I); H=imadjust(I,[0 1],[1 0],1.5); %设置图像倒置参数 figure;subimage(H) %显示倒置后的图像
原图像的灰度图 灰度倒置后的图像 虑及各位的阅读疲劳,今天的更新就到这里,明天会接着更新,感谢诸君厚爱,收藏之前不要忘了点赞哦。
-
绘制函数图像
2018-04-27 21:14:11在linux中绘制函数图像,用c++编写。大家可以参考。。。。 -
C++绘图函数
2012-05-25 11:21:10easyx库中常用的函数,包含绘图环境相关函数,颜色表示及相关函数,绘制图形相关函数,文字输出相关函数,图像处理相关函数 -
c++ 绘制函数图像_R语言:如何将多张统计图绘制在一张上面
2020-11-20 06:48:54一、使用R语言自带的函数绘制的图像R语言本身就已经内置了许多绘图函数,能够满足较为基本的绘图需求,例如hist()、boxplot()、spineplot()等等。如果我们想要将使用这些函数绘制的图像汇总在一张图中,需要使用...在使用R语言进行数据可视化的时候,常常需要将多张统计图表绘制在同一张图上面,从而更高效地传递信息,下面我们就来一起看看具体如何实现。
一、使用R语言自带的函数绘制的图像
R语言本身就已经内置了许多绘图函数,能够满足较为基本的绘图需求,例如
hist()
、boxplot()
、spineplot()
等等。如果我们想要将使用这些函数绘制的图像汇总在一张图中,需要使用split.screen()
和screen()
函数,具体方法如下:1. 步骤一:分割屏幕
split.screen()
顾名思义,
split.screen()
函数是用于分割屏幕的,它需要传入一个形似c(nrow, ncol)
的参数,意为将屏幕分割为nrow
行,ncol
列;分割完成后函数会返回一个整数(integer)型向量,长度等于nrow * ncol
,即为分割之后屏幕的每一个部分对应的“编号”。这些“编号”将用于传入screen()
函数,进行后续的绘图工作。2. 步骤二:指定绘图位置
screen()
分隔完屏幕之后,我们需要首先指定一张子图的位置,使用
screen()
函数,传入之前分割屏幕时返回的“编号”, 便完成了指定。3. 步骤三:绘图
完成指定子图位置之后,便可以进行正常的绘图工作,使用
hist()
、boxplot()
、spineplot()
等函数进行绘图,注意每绘制完一张图就需要使用screen()
来更改绘图的位置。下面我们来看一个实例:这里我们使用R语言内置的数据集
AirPassengers
和cars
来进行演示:# 分割屏幕 > split.screen(c(2, 1)) > [1] 1 2 # 绘制第一个图 > screen(1) > plot(cars) # 绘制第二个图 > screen(2) > plot(AirPassengers) # 结束绘图 > dev.off()
代码运行结果 二、使用ggplot2绘制的图像
ggplot2
是非常流行的R语言可视化包,功能极为强大,能够绘制众多复杂的统计图表。在同一张图中显示多张ggplot2
图像同样也需要借助第三方的R包——ggpubr
。ggpubr
包中的ggarrange()
可以方便地将多张图整合在一张上面。其常用的参数如下:ggarrange(..., ncol = NULL, nrow = NULL)
。其中
...
是按顺序依次列出的需要整合的图表,ncol
是列数,nrow
是行数。可以看出,相比于R语言自带函数绘制的图像,在ggarrange()
的帮助下,ggplot2
绘制的图像整合起来更加方便,下面我们看一个实例,依然使用R语言内置的数据集cars
:# 绘制第一个图像 > p1 = ggplot(cars, aes(x = speed, y = dist)) + geom_line(size = 1) + labs(x = "speed", y = 'dist') # 绘制第二个图像 > p2 = ggplot(cars, mapping = aes(x = speed, y = dist)) + geom_point(size = 1, col = 'darker') + labs(x = "speed", y = 'dist') # 整合两张图 > ggarrange(p1, p2, ncol = 2, nrow = 1)
代码运行结果 -
Graph 1.2_函数图像绘制_极坐标_C++_
2021-10-03 02:14:56做出函数图像。快速 简便支持标准直角坐标、极坐标采用剪枝算法,具备极高绘制精度、速度,同时自动过滤间断点、无穷点。自动上色、自动编号、自动筛选有效定义域。 -
MFC坐标轴及函数图像绘制
2019-04-15 20:48:06利用VS建立MFC基于对话框的工程,其他默认。之后添加两个文本输入控件,两个按钮控件,并为文本控件建立两个...找到:OnPaint() 函数,在该函数最后的 }前添加实现代码。本资源以上传全部解决方案文件,可直接运行使用。 -
C++三次贝塞尔曲线绘制源代码
2019-01-04 05:38:06C++实现的三次贝塞尔曲线绘制,可拖动控制点修改曲线形状,包含源代码和可执行文件,VS2008的工程。 C++实现的三次贝塞尔曲线绘制,可拖动控制点修改曲线形状,包含源代码和可执行文件,VS2008的工程。 -
用C/C++绘制出余弦曲线和正弦曲线(不使用库函数)
2020-10-01 15:57:58- 余弦函数 - 正弦函数 #include<iostream> #include<cmath> #define PI 3.1 #define tow_PI 6.2 using namespace std; int main() { double y,x; for(y=1;y>0;y-=0.1) { double cx=asin(y);... -
VC-(VS2013)绘制正弦波sin函数图像
2019-03-05 23:54:19VS2013写的,MFC对话框程序,函数图像清晰漂亮,参数可调,包含全部源码,初学者可用于参考。 VS2013写的,MFC对话框程序,函数图像清晰漂亮,参数可调,包含全部源码,初学者可用于参考。 -
C++复习(二)——绘制余弦函数图像
2019-02-23 19:17:15更新完第一篇C++介绍文章发现太干了,直接介绍定义还不如看书学得快,因此在接下来的文章中会将我曾经刷过的题目整理上来,在注释中不断引入新的知识点,函数,数据结构,遇到的坑等等,同时也会对题目进行解析,... -
【仿真】绘制一次函数图像
2021-05-24 06:13:35360截图20200320092354010.jpg (34.52 KB, 下载次数: 4)2020-3-20 14:22 上传春分,是春季九十天的中分点。二十四节气之一,每年农历二月十五日前后(公历大约...利用mPython设计一个一次函数图像,现在分享给大家!3... -
C++ 超详细8Bit图像直方图统计并绘制显示,不使用calcHist()函数,自己手写统计
2022-04-21 16:21:22C++ OpenCv中提供的函数calcHist()可以很方便的帮助我们统计一幅8Bit图像的直方图,但是有时候我们不想用OpenCv提供的函数来统计,想自己根据自己的需求来做一个统计,那么看这个教程就对了,学会这种方法不仅是8Bit... -
简易版C++,MFC在直角坐标系中绘制数学函数
2018-11-19 21:21:00简易版C++,MFC在直角坐标系中绘制数学函数(支持上下左右,放大缩小),文件中代码注释很多,有助于你了解该程序! -
C++ EasyX 画函数第一象限图像
2021-01-14 23:02:05//画函数 x*x+x for (float x = 0; x ; x+=0.01) { ml_Point point(x, sqrtf(x*x+x)); unsigned char rgb[3]; getRandomRGB(rgb); if (!drawPoint(point.x, point.y, rgb)) { break; } Sleep(1); ... -
数学函数图像绘制
2016-10-09 15:09:56可已进行sin cos tan log 等一系列函数的绘制,可进行缩放大小。呕心沥血之作,希望对你们有参考价值。代码比较水,毕竟是新手。 -
C++ HSB模型绘制调色板
2015-11-26 11:39:44将photoshop的调色板画出来,用到了win32 api绘图函数,还有bmp文件的写法 -
C++下OpenCV学习笔记----基本图形的绘制
2021-02-09 12:08:28C++下OpenCV学习笔记 ----基本图形的绘制 一.绘制直线:line函数 二.绘制椭圆:ellipse函数 三.绘制圆:circle函数 四.绘制填充多边形:fillPoly函数 五.绘制多边形:polyline函数 六.绘制矩形:rectangle函数 七.... -
C++开发-绘制正弦曲线
2017-09-17 16:59:56通过OnDraw函数绘制图形 过程为先绘制两个坐标轴,再绘制正弦曲线的方法。其中将曲线分解为660个像素点,让其看起来更像“曲线” void CMFCApplication3View::OnDraw(CDC* pDC) { CMFCApplication3Doc* pDoc = ... -
Word版本MFC函数图像绘制
2019-04-15 21:41:10利用MFC可以更好地学习c++的类和对象,增进理解抽象内容等,本贴适合有一定c基础的下载学习! -
C++语言图形编程基本函数
2020-03-08 18:34:32C++语言图形编程最基本的几个函数,简略代码,仅介绍函数及参数,并举例说明。非常简单,适合新人查阅。 工具及环境 平台:Windows VS2013 主要头文件:graphics.h (百度EasyX安装依赖的库文件) ... -
C++解析BMP图像控制台绘制
2021-09-29 19:42:01文件指针跳转到图像数据起始位置,读取RGB值,并利用SetPixel()函数在控制台绘制图像。 注意: 有的编译环境中调用SetPixel()函数,除了已写的头文件,还需要手动包含静态库。如cmd编译时用指令 g++ bmpshow.... -
基于OpenCV C++绘制直方图
2020-11-21 21:04:37直方图是变量分布的统计图形表示,它让我们能够理解数据的密度估计...现在我们来开始一步步绘制吧~ (二话不说,就直接看代码吧。哈哈哈,详情已在代码中解释~) #include <iostream> #include <opencv2/openc -
C++ MFC 画函数曲线(包含坐标)
2016-12-23 22:39:16第一步:新建MFC。 VC++6.0的话是文件--新建--工程--MFCAppWizard(exe)--填写工程名称--...这个函数名在--C+你的工程名字+View里面,点开这个,就可以看见OnDraw(CDC *pDC)了,双击,然后看见:// TODO: add draw c