C++ 为什么VisualStudio2010不能运行Gabor过滤

C++ 为什么VisualStudio2010不能运行Gabor过滤,c++,visual-studio-2010,opencv,C++,Visual Studio 2010,Opencv,我想问一下VisualStudio。我有gabor滤波代码。我不知道为什么我的代码不能在VisualStudio2010中运行。而我的代码可以在代码块中很好地运行。毕竟,我对我的VisualStudio项目有正确的配置。这是我的密码: #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #in

我想问一下VisualStudio。我有gabor滤波代码。我不知道为什么我的代码不能在VisualStudio2010中运行。而我的代码可以在代码块中很好地运行。毕竟,我对我的VisualStudio项目有正确的配置。这是我的密码:

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <math.h>
#include <iostream>
#include <stdio.h>
#include <time.h>
cv::Mat src_f;
cv::Mat src;
cv::Mat dest;
cv::Mat dest2;


cv::Mat mkKernelreal(int ks, double sig, double th, double lm, double ps){
        int hks = (ks-1)/2;
        double theta = th*CV_PI/180;
        double psi = ps*CV_PI/180;
        double del = 2.0/(ks-1);
        printf(": %f \n",del);
        double lmbd = lm;
        double sigma = sig/ks;
        double x_theta;
        double y_theta;
        cv::Mat kernel(ks,ks, CV_32F);
        for (int y=-hks; y<=hks; y++)
        {
            for (int x=-hks; x<=hks; x++)
            {
                x_theta = x*del*cos(theta)+y*del*sin(theta);
                y_theta = -x*del*sin(theta)+y*del*cos(theta);
                kernel.at<float>(hks+y,hks+x) = (float)exp(-0.5*(pow(x_theta,2)+pow(y_theta,2))/pow(sigma,2))* cos(2*CV_PI*x_theta/lmbd + psi);
            }
        }
   return kernel;
}

cv::Mat mkKernelimag(int ks, double sig, double th, double lm, double ps){
        int hks = (ks-1)/2;
        //int hks = ks;
        double theta = 0.5*CV_PI;
        double psi = ps*CV_PI/180;
        double del = 2.0/(ks-1);
        double lmbd = lm;
        double sigma = sig/ks;
        double x_theta;
        double y_theta;
        cv::Mat kernel(ks,ks, CV_32F);
        for (int y=-hks; y<=hks; y++)
        {
            for (int x=-hks; x<=hks; x++)
            {
                x_theta = x*del*cos(theta)+y*del*sin(theta);
                y_theta = -x*del*sin(theta)+y*del*cos(theta);
                kernel.at<float>(hks+y,hks+x) = (float)exp(-0.5*(pow(x_theta,2)+pow(y_theta,2))/pow(sigma,2))* sin(2*CV_PI*x_theta/lmbd + psi);
            }
        }
   return kernel;
}
/*
cv::Mat kuadrat(cv::Mat input){

return kuadrat;
}*/

void feature_extraction(cv::Mat inpt){
    int kernel_size=25;
    int pos_sigma= 10;
    int pos_lm = 10;
    int pos_th = 0;
    int pos_psi = 0;

    double sig = pos_sigma;
    double lm = 0.5+pos_lm/100.0;
    double th = pos_th;
    double ps = pos_psi;
    cvNamedWindow("Result Real");

    cv::Mat kernel = mkKernelreal(kernel_size, sig, th, lm, ps);
    cv::Mat kernelimag = mkKernelimag(kernel_size, sig, th, lm, ps);

    cv::filter2D(inpt, dest, CV_32F, kernel);
    cv::filter2D(inpt, dest2, CV_32F, kernelimag);
    //cv::Mat Lkernel(kernel_size, kernel_size, CV_32F);
    cv::Mat Tempreal;
    cv::Mat TempImag;

    cv::Mat newReal;
    dest.convertTo(newReal, CV_32F);
    cv::pow(newReal,2,Tempreal);

    cv::Mat newImag;
    dest2.convertTo(newImag,CV_32F);
    cv::pow(newImag,2,TempImag);

    cv::Mat Kuadrat;
    cv::Mat TempKuadrat;
    cv::Mat TempTambah;
    TempTambah = Tempreal+TempImag;


    cv::sqrt(TempTambah,TempKuadrat);
    cv::Mat mag;
    cv::imshow("Result Imaginary", dest2);
    cv::imshow("Result Real", dest);
}

time_t start,end_time,diff;
int main(int argc, char** argv){
    start = clock();
    cv::Mat image = cv::imread("6.jpg",1);
    cv::imshow("Src", image);
    cv::cvtColor(image, src, CV_BGR2GRAY);
    src.convertTo(src_f, CV_32F, 1.0/255, 0);
    feature_extraction(src_f);
    end_time = clock();
    double coba = double(end_time - start)/CLOCKS_PER_SEC;
printf("Waktu Komputasi : %f",coba);
cv::waitKey(0);
return 0;
}
visual studio的结果为黑色。 按预期从代码块生成结果


我非常需要帮助。谢谢。

也可以试试cerr,您不需要自己动手:内核构建良好,并按预期显示。然而,我的问题是,当filter2D过滤图像时,卷积图像变为空白。与代码块结果不同,结果与我预期的一样。我和我的VisualStudio有什么关系吗?回答::在VisualStudio CV_32F中,深度没有真正起作用。因此,我改为CV_8U,8位/像素无符号-即一个像素可以有0-255的值。谢谢你帮我,贝拉克:D