在VS2017中,利用C++实现条纹图像生成。
条纹图像的原理:Mat数据中,数值为零的代表黑色,数值越大越接近白色。以正弦函数变化曲线为例,设置其最小值为黑色,最大值为白色,其他为黑白渐变。将正弦函数对应的数值放入Mat中,则会得到条纹图像。
初始化条纹图像的Mat类型为:CV_32FC3
此类型的Mat数据范围为0-1.0
//img表示初始化的条纹矩阵 r表示振幅 f表示频率 phase表示相移
Mat setSin(Mat img, double r, double f, double phase)
{
//刻度 每个像素代表多少刻度
double s = 0.01;
//将数值加入到条纹画布中
for (int i = 0; i < img.cols; i++)
{
for (int j = 0; j < img.rows; j++)
{
img.at<Vec3f>(j, i)[0] = r * sin(2 * PI*f*i*s + phase) + r;
img.at<Vec3f>(j, i)[1] = r * sin(2 * PI*f*i*s + phase) + r;
img.at<Vec3f>(j, i)[2] = r * sin(2 * PI*f*i*s + phase) + r;
}
}
//返回条纹图像
return img;
}
当频率f=10,振幅r=0.5,相位phase=0时的输出结果:
仅供自己学习笔记!
如需转发请注明出处:https://blog.csdn.net/weixin_43865692/article/details/119141967