gpt4 book ai didi

opencv - project1.exe中0x52f9e470处未处理的异常:0xC000001D:非法指令

转载 作者:行者123 更新时间:2023-12-02 16:47:32 25 4
gpt4 key购买 nike

我试图在C++中使用opencv检测对象,但出现错误:
project1.exe中0x52f9e470处未处理的异常:0xC000001D:非法指令。

使用Windows 7 32位,opencv 2.4.3,Visual Studio(C++)2010,我的代码是:

   #include <opencv\cv.h>
#include <opencv\highgui.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>


// Create a string that contains the exact cascade name
// Contains the trained classifer for detecting hand
const char *cascade_name="D:/31dec12/hand.xml";

//The function detects the hand from input frame and draws a rectangle around the detected portion of the frame
void detect_and_draw( IplImage* img )
{

// Create memory for calculations
static CvMemStorage* storage = 0;

// Create a new Haar classifier
static CvHaarClassifierCascade* cascade = 0;

// Sets the scale with which the rectangle is drawn with
int scale = 1;

// Create two points to represent the hand locations
CvPoint pt1, pt2;

// Looping variable
int i;

// Load the HaarClassifierCascade
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );

// Check whether the cascade has loaded successfully. Else report and error and quit
if( !cascade )
{
fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
return;
}

// Allocate the memory storage
storage = cvCreateMemStorage(0);

// Create a new named window with title: result
cvNamedWindow( "result", 1 );

// Clear the memory storage which was used before
cvClearMemStorage( storage );

// Find whether the cascade is loaded, to find the hands. If yes, then:
if( cascade )
{

// There can be more than one hand in an image. So create a growable sequence of hands.
// Detect the objects and store them in the sequence
CvSeq* hands = cvHaarDetectObjects( img, cascade, storage,
1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
cvSize(40, 40) );

// Loop the number of hands found.
for( i = 0; i < (hands ? hands->total : 0); i++ )
{
// Create a new rectangle for drawing the hand
CvRect* r = (CvRect*)cvGetSeqElem( hands, i );

// Find the dimensions of the hand,and scale it if necessary
pt1.x = r->x*scale;
pt2.x = (r->x+r->width)*scale;
pt1.y = r->y*scale;
pt2.y = (r->y+r->height)*scale;

// Draw the rectangle in the input image
cvRectangle( img, pt1, pt2, CV_RGB(230,20,232), 3, 8, 0 );
}
}

// Show the image in the window named "result"
cvShowImage( "result", img );


}


// A Simple Camera Capture Framework
int main()
{

// Gets the input video stream from camera
CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );

// Checks if the input stream is obtained
if( !capture )
{
fprintf( stderr, "ERROR: capture is NULL \n" );
getchar();
return -1;
}

// Show the image captured from the camera in the window and repeat
while( 1 )
{

// Get one frame
IplImage* frame = cvQueryFrame( capture );

// Cecks if a frame is obtained
if( !frame )
{
fprintf( stderr, "ERROR: frame is null...\n" );
getchar();
break;
}

// Flips the frame into mirror image
cvFlip(frame,frame,1);

// Call the function to detect and draw the hand positions
detect_and_draw(frame);

//If ESC key pressed, Key=0x10001B under OpenCV 0.9.7(linux version),
//remove higher bits using AND operator
if( (cvWaitKey(10) & 255) == 27 )
break;
}

// Release the capture device housekeeping
cvReleaseCapture( &capture );

return 0;
}

最佳答案

您使用哪种CPU?上次出现错误:0xC000001D:非法指令与代码中使用的SSE指令有关。某些新的SSE指令未在AMD处理器上实现,例如因此,您可以通过在没有SSE支持的情况下重建opencv来解决此问题。

关于opencv - project1.exe中0x52f9e470处未处理的异常:0xC000001D:非法指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14401024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com