C++-实现matlab的meshgird(OpenCV)
Posted 翟大宝Steven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++-实现matlab的meshgird(OpenCV)相关的知识,希望对你有一定的参考价值。
场景需求
matlab的meshgird是图像处理时常用的函数,用于生成网格采样点,在3D图形绘制中起了非常关键的作用。C++中运用OpenCV也可以实现同样的效果。
功能函数代码
/**
* @brief UnitCart 生成网格采样点
* @param squaresize 生成网格区域的尺寸
* @param x 生成的x矩阵
* @param y 生成的y矩阵
*/
void UnitCart(int squaresize, cv::Mat& x, cv::Mat& y) {
CV_Assert(squaresize % 2 == 1);
x.create(squaresize, squaresize, CV_32FC1);
y.create(squaresize, squaresize, CV_32FC1);
//设置边界
x.col(0).setTo(-1.0);
x.col(squaresize - 1).setTo(1.0f);
y.row(0).setTo(1.0);
y.row(squaresize - 1).setTo(-1.0f);
float delta = 2.0f / (squaresize - 1.0f); //两个元素的间隔
//计算其他位置的值
for (int i = 1; i < squaresize - 1; ++i) {
x.col(i) = -1.0f + i * delta;
y.row(i) = 1.0f - i * delta;
}
}
C++测试代码
#include<iostream>
#include<opencv2/opencv.hpp>
#include<ctime>
using namespace std;
using namespace cv;
void UnitCart(int squaresize, cv::Mat& x, cv::Mat& y);
int main(void)
{
cv::Mat x, y;
int size = 1001;
UnitCart(size, x, y);
imshow("x", x);
imshow("y", y);
waitKey(0);
system("pause");
return 0;
}
void UnitCart(int squaresize, cv::Mat& x, cv::Mat& y) {
CV_Assert(squaresize % 2 == 1);
x.create(squaresize, squaresize, CV_32FC1);
y.create(squaresize, squaresize, CV_32FC1);
//设置边界
x.col(0).setTo(-1.0);
x.col(squaresize - 1).setTo(1.0f);
y.row(0).setTo(1.0);
y.row(squaresize - 1).setTo(-1.0f);
float delta = 2.0f / (squaresize - 1.0f); //两个元素的间隔
//计算其他位置的值
for (int i = 1; i < squaresize - 1; ++i) {
x.col(i) = -1.0f + i * delta;
y.row(i) = 1.0f - i * delta;
}
}
测试效果
如上图所示,C++所写的代码同matlab中meshgird生成的x和y矩阵一致。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
以上是关于C++-实现matlab的meshgird(OpenCV)的主要内容,如果未能解决你的问题,请参考以下文章