借助opencv中的remap函数可以实现图像特效。
void Wave(const cv::Mat image, cv::Mat& result)
{
Mat srcX(image.size(), CV_32F);
Mat srcY(image.size(), CV_32F);
// 创建映射参数
for (int i = 0; i < image.rows; i++) {
for (int j = 0; j < image.cols; j++){
srcX.at<float>(i, j) = j; // 列不变
srcY.at<float>(i, j) = i + 5 * sin(j / 10.0); // 行按照正弦曲线移动
}
}
cv::remap(image, result, srcX, srcY, cv::INTER_LINEAR);
}
效果图如下:
image.png
网友评论