我正在尝试从图像中提取和绘制轮廓。 我选择的代码主要来自opencv示例代码,但是当我运行此代码时,我收到了一条带有消息的异常错误 " test1.exe中0x000007FEFDCA9E5D的第一次机会异常:Microsoft C ++异常:cv ::内存位置0x000000000028EB40的异常。 如果存在此异常的处理程序,则可以安全地继续该程序。"
,我一直在寻找解决方案,但我找到了类似的问题。 以下代码是否有任何解决方案,因为如果有人试图绘制轮廓,它是最常见的代码。
如果有人为轮廓提取提出了最佳或通用的解决方案,我会对遇到同样错误的其他人感到非常高兴
`
#include "stdafx.h"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include "opencv2\imgproc\imgproc.hpp"
using namespace cv;
using namespace std;
int main( int argc, const char** argv )
{
Mat img1 = imread("ima1.JPG", CV_LOAD_IMAGE_UNCHANGED);
Mat canny_img1;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
RNG rng(12345);
/*Using canny filter for feature extraction in image 1*/
Canny(img1,canny_img1,1,3,3,0);
/* Find contours*/
findContours( canny_img1 , contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
/* Draw contours */
// Mat drawing = Mat::zeros( canny_img1.size(), CV_8UC3 );
/// Draw contours
Mat drawing = Mat::zeros( canny_img1.size(), CV_8UC3 );
for( int i = 0; i< contours.size(); i++ )
{
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point() );
}
/// Show in a window
namedWindow( "Contours", CV_WINDOW_AUTOSIZE );
imshow( "Contours", drawing );
waitKey(0);
return 0;
}
`
答案 0 :(得分:0)
要运行示例代码,您需要正确配置VS项目。
一些要点:
您必须转到项目属性并设置一些内容:
1)使用staticlibrary或dynamic:为此你需要正确选择“附加库目录”中的相应目录。
如果您使用staticlib,则需要在其中添加带有“d”的.lib文件,具体取决于您尝试运行项目“Debug / Release”的模式。
2)根据您正在制作的32位或64位项目,您需要将相应的dll目录添加到系统路径。
3)您需要添加“包含其他目录”c \ opencv \ build \ include“
希望它会有所帮助