VS2013环境下被OpenCV这个鬼畜的问题折磨好几天了
在Mastering OpenCV with Practical CV Project书中的第一章 将图片变成素描的示例中,我尝试以下代码,OpenCV配置是没有问题的,因为我用一个demo示例将图片显示了出来,可下面这段代码始终运行不成功。opencv_imgproc249d.dll,opencv_highgui249d.dll,opencv_core249d.dll,cannot find or open PDB file,已经把百度上有关这个问题的前5页全部看了一遍,依旧没有解决...
下面是
/*main_desktop.cpp*/
#include "stdafx.h"
#include <stdlib.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <highgui.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <fstream>
#include <iostream>
#include "cartoon.h"
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
int camerNumber = 1;
if (argc > 1){
camerNumber = atoi(argv[1]);
}
cout<<"how are you"<<endl;
//get access to the camera
/*打开摄像头+绘图*/
//声明IplImage指针
IplImage* pFrame;
//IplImage* displayedFrame=NULL;
//获取摄像头
CvCapture* pCapture = cvCreateCameraCapture(0);
//创建窗口
cvNamedWindow("NiuBility", CV_WINDOW_AUTOSIZE);
if (!pCapture)
cout << "Fuck" << endl;
while (true){
Mat cameraFrame;
cameraFrame = cvQueryFrame(pCapture);
Mat displayedFrame = Mat(cameraFrame.size(), CV_8UC3);
//displayedFrame = cameraFrame;将这句注释取消掉,可以成功调用摄像头,并显示
cartoonifyImage(cameraFrame, displayedFrame);//即使将cart…Image函数改成displayedFram=cameraFrame,摄像头显示不出来了。
imshow("Niubility", displayedFrame);
char c = cvWaitKey(3);
if (c == 27)break;
}
cvReleaseCapture(&pCapture);
cvDestroyWindow("Niubility");
return 0;
}
/*cartoon.cpp*/
#include "stdafx.h"
#include "opencv2/opencv.hpp"
#include "cartoon.h"
using namespace cv;
using namespace std;
//void cartoonifyImage(IplImage* srcColor_img , IplImage* result_img){
void cartoonifyImage(Mat srcColor_img, Mat result_img){
/*测试该函数*/
result_img = srcColor_img;
//cout << "how are you" << endl;
////IplImage转为Mat
//Mat srcColor = srcColor_img;
////均值滤波器
//Mat gray;
//cvtColor(srcColor, gray, CV_BGR2GRAY);
//const int MEDIAN_BLUR_FILTER_SIZE = 7;
//medianBlur(gray, gray, MEDIAN_BLUR_FILTER_SIZE);
//
////拉普拉斯滤波器
//Mat edges;
//const int LAPLACIAN_FILTER_SIZE = 5;
//Laplacian(gray, edges, CV_8U, LAPLACIAN_FILTER_SIZE);
////阈值反转处理
//Mat mask;
//const int EDGES_THRESHOLD = 80;
//threshold(edges, mask, EDGES_THRESHOLD, 255, THRESH_BINARY_INV);
//
//result_img = mask;
}
/*cartoon.h*/
using namespace cv;
void cartoonifyImage(Mat a, Mat b);
//void cartoonifyImage(IplImage* a, IplImage* b);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
请正确配置,见图
图1:包含目录是指你#include的文件所处的目录。库目录是指所有lib文件所处的目录。
你的dll无法定位的问题,应该是下图没有配置好。
图2:链接器-输入是指所有dll所在的目录,注意这个配置的release和debug需要的dll是不一样的,区别在版本249后有没有d这个字母。