OpenCV是否提供了如何绘制和绘制图形的功能?
我找到了由他自己创建的Shervin Emami http://www.shervinemami.info/graphs.html的链接。
从我所看到的,OpenCV没有提供一个函数作为其绘制和绘制图形的API的一部分,以cvDrawPlot(cvMat * data,其他args ...)的形式。
大多数绘图样本仅使用OpenCV函数调用,包括使用cvCreateImage
创建任何其他图像。
然后他们迭代数据并用OpenCV primites填充图像,如cvRectangle
,cvLine
,cvCircle
和cvPoint
。
然后他们调用cvShowImage
来显示创建的情节图像。
如果您找到的库符合您的要求,那么您可以使用它。
您还可以将数据写入文件并调用外部绘图工具(如gnuplot)或调用函数,使用其他可视化或绘图库(如VTK或plplot)绘制和绘制图形。
您找到的另一个图书馆是cvplot。
一个相当粗糙但是自己动手的方法,需要在cv :: Mat图像上绘制线图:
template <typename T>
cv::Mat plotGraph(std::vector<T>& vals, int YRange[2])
{
auto it = minmax_element(vals.begin(), vals.end());
float scale = 1./ceil(*it.second - *it.first);
float bias = *it.first;
int rows = YRange[1] - YRange[0] + 1;
cv::Mat image = Mat::zeros( rows, vals.size(), CV_8UC3 );
image.setTo(0);
for (int i = 0; i < (int)vals.size()-1; i++)
{
cv::line(image, cv::Point(i, rows - 1 - (vals[i] - bias)*scale*YRange[1]), cv::Point(i+1, rows - 1 - (vals[i+1] - bias)*scale*YRange[1]), Scalar(255, 0, 0), 1);
}
return image;
}
用法示例:
vector<int> numbers(100);
std::iota (numbers.begin(), numbers.end(), 0);
int range[2] = {0, 100};
cv::Mat lineGraph = plotGraph(numbers, range);
然后可以使用imshow
或Image Watch查看图表
看看https://github.com/leonardvandriel/cvplot。您可以绘制配置较少的图形,并在单个窗口中支持多个图形。 (注:公然自我推销)。