Archer_black 2015-03-02 08:31 采纳率: 0%
浏览 2182

如何使用opencv的Java接口中的Core.dft()函数来实现图像的傅里叶变换?

opencv中的dft()函数网上只找到了c++接口的,部分代码:
Mat padded; //expand input image to optimal size
int m = getOptimalDFTSize( I.rows );
int n = getOptimalDFTSize( I.cols ); // on the border add zero values
copyMakeBorder(I, padded, 0, m - I.rows, 0, n - I.cols, BORDER_CONSTANT, Scalar::all(0));
Mat planes[] = {Mat_(padded), Mat::zeros(padded.size(), CV_32F)};
Mat complexI;
merge(planes, 2, complexI); // Add to the expanded another plane with zeros
dft(complexI, complexI); // this way the result may fit in the source matrix

链接:http://www.blogbus.com/shijuanfeng-logs/222165953.html

现在需要一个在Android上可以实现的Java代码,我尝试着按上面那个c++代码搬到Java中,代码如下:
Mat bmMat = new Mat();
Utils.bitmapToMat(bm, bmMat); //bm是已经读入了的bitmap,将其转换成Mat
Mat pad=new Mat();
MatOfFloat padded = new MatOfFloat();

int m = Core.getOptimalDFTSize(bmMat.rows());
int n = Core.getOptimalDFTSize(bmMat.cols());
Imgproc.copyMakeBorder(bmMat, pad, 0, m - bmMat.rows(), 0, n- bmMat.cols(),Imgproc.BORDER_CONSTANT, Scalar.all(0));
padded=(MatOfFloat)pad;
Mat[] userid = { padded, Mat.zeros(padded.size(), CvType.CV_32F) };
List planes = Arrays.asList(userid);
Mat complexI = new Mat();
Core.merge(planes, complexI);
Core.dft(complexI, complexI);

可是运行失败,我感觉是c++中Mat_(padded)和Java中MatOfFloat这一块没有对应上,所以出现了问题。求大神解答,谢谢!!!

  • 写回答

1条回答 默认 最新

  • 打酱油的工程师 单片机领域优质创作者 2023-01-04 23:46
    关注

    Core.dft() 是 OpenCV 中 Java 接口中的傅里叶变换函数。要使用这个函数对图像进行傅里叶变换,需要按照以下步骤进行操作:
    首先,需要准备一个 Mat 类型的图像数据,用于傅里叶变换。这个 Mat 类型的图像数据必须是单通道的,并且每个像素的数据类型必须是浮点型。
    接着,创建一个 Mat 类型的数组,用于存储傅里叶变换的结果。这个 Mat 类型的数组应该有两个通道,并且每个像素的数据类型也应该是浮点型。
    然后,调用 Core.dft() 函数进行傅里叶变换。你需要将图像数据和结果数组作为参数传递给这个函数。
    最后,你就可以使用傅里叶变换的结果数组进行进一步的处理或者可视化了。
    示例:

    import org.opencv.core.Core;
    import org.opencv.core.CvType;
    import org.opencv.core.Mat;
    
    public class FFTExample {
        public static void main(String[] args) {
            // 读入图像数据
            Mat image = ...;
    
            // 创建傅里叶变换的结果数组
            Mat fftResult = new Mat(image.rows(), image.cols
    
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧