首页 > 其他分享 >OpenCV DFT

OpenCV DFT

时间:2023-08-14 17:34:15浏览次数:32  
标签:Mat int DFT namespace OpenCV complexI cout

 

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char **argv)
{
    Mat srcImage = imread("/home/cjk/图片/777.png");
    cout << "@@@@@   1   @@@" << endl;
    if (srcImage.empty() )
    {
        std::cerr << "fail to load image " << std::endl;
        return -1;
    }
    //转换为灰度图像
    Mat grayImage;
    cvtColor(srcImage,grayImage,COLOR_BGR2GRAY);
    cout << "@@@@@   2   @@@" << endl;
    //将图像拓展到傅里叶变换的最佳尺寸
    int row = getOptimalDFTSize(grayImage.rows);
    int col = getOptimalDFTSize(grayImage.cols);
    //将扩展后的尺寸设置为0
    Mat padded;
    copyMakeBorder(grayImage,padded,0,row-grayImage.rows,
            0,col-grayImage.cols,BORDER_CONSTANT,Scalar::all(0));
    //傅里叶计算的实部与虚部
    cout << "@@@@@   3   @@@" << endl;
    Mat planes[] = {Mat_<float>(padded),Mat_<float>(padded.size(),CV_32F)};
    Mat complexI;
    merge(planes,2,complexI);
    //进行傅里叶变换
    dft(complexI,complexI);
    //将复数转换为幅值
    cout << "@@@@@   4   @@@" << endl;
    split(complexI,planes);
    magnitude(planes[0],planes[1],planes[0]);
    Mat magnitudeImage = planes[0];
    //尺寸缩放
    magnitudeImage += Scalar::all(1);
    log(magnitudeImage,magnitudeImage);
    cout << "----------------" << endl;
    //剪切和重分布图像
    cout << "magnitudeImage.size() : " << magnitudeImage.size() << endl;
    cout << "magnitudeImage.rows : " << magnitudeImage.rows << endl;
    cout << "magnitudeImage.cols : " << magnitudeImage.cols << endl;
    magnitudeImage  = magnitudeImage(Rect(0,0,magnitudeImage.cols ,magnitudeImage.rows ));
    cout << "----------------" << endl;
    int cx = magnitudeImage.cols / 2;
    int cy = magnitudeImage.rows / 2;
    cout << "cx : " << cx << endl;
    cout << "cy : " << cy << endl;
    Mat q0(magnitudeImage,Rect(0,0,cx,cy));
    Mat q1(magnitudeImage,Rect(cx,0,cx,cy));
    Mat q2(magnitudeImage,Rect(0,cy,cx,cy));
    Mat q3(magnitudeImage,Rect(cx,cy,cx,cy));
    //交换象限 左上和右下
    cout << "@@@@@   6   @@@" << endl;
    Mat temp;
    q0.copyTo(temp);
    q3.copyTo(q0);
    temp.copyTo(q3);
    //右上和左下
    q1.copyTo(temp);
    q2.copyTo(q1);
    temp.copyTo(q2);
    //归一化
    normalize(magnitudeImage,magnitudeImage,0,1,NORM_MINMAX);

    imshow("srcImage",srcImage);
    imshow("freq and Amplitude",magnitudeImage);
    waitKey();
    //cvDestroyAllWindows();
    return 0;
}

 

标签:Mat,int,DFT,namespace,OpenCV,complexI,cout
From: https://www.cnblogs.com/xiaochouk/p/17629281.html

相关文章

  • OpenCV笔记:cv2.VideoCapture 完成视频的跳帧输出操作
    前言 我开始关注这个问题,是在使用PaddleOCR+OpenCV进行视频文字识别的时候,因为OpenCV需要循环读取视频的每一帧进行解析,这就导致视频播放特别卡顿。由于视频中相邻帧的内容是一样的,重复识别也没有意义,所以我就在考虑:有没有办法跳帧输出?来源:https://blog.csdn.net/weixin_4425......
  • 【opencv】传统图像识别:hog+svm实现图像识别详解
    图像识别技术是信息时代的一门重要的技术,其产生目的是为了让计算机代替人类去处理大量的物理信息。传统图像识别技术的过程分为信息的获取、预处理、特征抽取和选择、分类器设计和分类决策。本文也是从这四点出发进行行文,以期了解传统图像识别技术、掌握hog特征提取和svm分类器。......
  • java opencv在图片上绘制 矩形
    javaopencv在图片上绘制矩形 packagecom.vfsd.core;importorg.opencv.core.Core;importorg.opencv.core.CvType;importorg.opencv.core.Mat;importorg.opencv.core.Point;importorg.opencv.core.Rect;importorg.opencv.core.Scalar;importorg.opencv.highgu......
  • java opencv绘制工字型
    javaopencv绘制工字型 packagecom.vfsd.core;importjava.util.ArrayList;importjava.util.List;importorg.opencv.core.Core;importorg.opencv.core.CvType;importorg.opencv.core.Mat;importorg.opencv.core.Point;importorg.opencv.core.Rect;importorg......
  • OpenCV与CUDA简介
    因为算法的需要,正常的CPU算法速度不够需要进行加速,OpenCV中正好加入了GPU计算的模块,OpenCV中有两种GPU的加速方式,一种是通用标准的opencl,另一种是NVIDIA的cuda加速。opencl是苹果公司提出的一种通用标准,多种平台支持的标准。cuda是NVIDIA提出的并行计算平台,只有NVIDIA的显卡支......
  • opencv-python 车牌检测和识别
    首先利用级联分类器把车牌位置找到取出来,然后用ocr进行车牌识别。1 OCR之Tesseract安装Tesseract安装可以参考这个链接: https://blog.csdn.net/m0_53192838/article/details/127432761 写的比较详细,我在使用的时候有一个报错有点意思,记录一下: Tesseractocr识别报错:tesser......
  • opencv-python 人脸人眼检测
    人脸检测:在一张图像中判断是否存在人脸并找出人脸所在的位置。人脸识别:在人脸检测的基础上收集人脸数据集合进行处理保存信息,将输入人脸与保存的信息进行比对校验,得到是否为其中某个人脸。特征值:以某种特定规则对输入源进行处理得到具有唯一性质量化的值,在人脸识别中特征值的提......
  • opencv-python 视频前后景分离
    背景分离(BS)是一种通过使用静态相机来生成前景掩码(即包含属于场景中的移动对象像素的二进制图像)的常用技术。BS计算前景掩码,在当前帧与背景模型之间执行减法运算,其中包含场景的静态部分,或者更一般而言,考虑到所观察场景的特征,可以将其视为背景的所有内容。前后景分离分为两步:第一步......
  • opencv-python 视频处理
    视频是由图片组成的,视频的每一帧就是一幅图片,一般是30帧,表示一秒钟显示30张图片。opencv中可以用 VideoCapture来捕获摄像头,用数字表示不同的设备,比如0,1。如果是视频文件,直接指定路径即可。VideoCapture类提供了初始化,打开视频文件或设备,视频帧捕获,视频文件或设备关闭,属性设......
  • C#实现PS曲线调整,OpenCV实现
    曲线原理 对于一个RGB图像, 可以对R, G, B通道进行独立的曲线调整,即,对三个通道分别使用三条曲线(Curve)。还可以再增加一条曲线对三个通道进行整体调整。 因此,对一个图像,可以用四条曲线调整。最终的结果,是四条曲线调整后合并产生的结果。比如:对红色通道定义一条曲线如下......