C++ 为什么VisualStudio2010不能运行Gabor过滤
我想问一下VisualStudio。我有gabor滤波代码。我不知道为什么我的代码不能在VisualStudio2010中运行。而我的代码可以在代码块中很好地运行。毕竟,我对我的VisualStudio项目有正确的配置。这是我的密码: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
#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