我在计算机上运行基于OpenCV的项目时遇到了一些问题。我在Visual Studio 2015中使用OpenCV 3.1.0,所以我使用的是vc14 .lib和.dll。 OpenCV的官方网页说3.1.0具有Visual Studio 14 2015支持,所以我不认为这是问题所在。
我正在运行的代码是:
enter code here
#include<stdio.h>
#include<math.h>
#include<opencv\cv.h>
#include<opencv\highgui.h>
#include<opencv2\objdetect\objdetect.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<vector>
using namespace cv;
using namespace std;
int main()
{
CascadeClassifier face_cascade, eye_cascade;
if (!face_cascade.load("haarcascade_frontalface_alt.xml")) {
printf("Error loading cascade file for face");
return 1;
}
if (!eye_cascade.load("haarcascade_eye.xml")) {
printf("Error loading cascade file for eye");
return 1;
}
VideoCapture capture(0); //-1, 0, 1 device id
if (!capture.isOpened())
{
printf("error to initialize camera");
return 1;
}
Mat cap_img, gray_img;
vector<Rect> faces, eyes;
while (1)
{
capture >> cap_img;
waitKey(10);
cvtColor(cap_img, gray_img, CV_BGR2GRAY);
cv::equalizeHist(gray_img, gray_img);
face_cascade.detectMultiScale(gray_img, faces, 1.1, 10, CV_HAAR_SCALE_IMAGE | CV_HAAR_DO_CANNY_PRUNING, cvSize(0, 0), cvSize(300, 300));
for (int i = 0; i < faces.size(); i++)
{
Point pt1(faces[i].x + faces[i].width, faces[i].y + faces[i].height);
Point pt2(faces[i].x, faces[i].y);
Mat faceROI = gray_img(faces[i]);
eye_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
for (size_t j = 0; j< eyes.size(); j++)
{
//Point center(faces[i].x+eyes[j].x+eyes[j].width*0.5, faces[i].y+eyes[j].y+eyes[j].height*0.5);
Point center(faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5);
int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);
circle(cap_img, center, radius, Scalar(255, 0, 0), 2, 8, 0);
}
rectangle(cap_img, pt1, pt2, cvScalar(0, 255, 0), 2, 8, 0);
}
imshow("Result", cap_img);
waitKey(3);
char c = waitKey(3);
if (c == 27)
break;
}
return 0;
}
这只是我在互联网上找到的一个例子。
我真的想了解OpenCV,但我无法运行任何东西:(
我正在使用Windows 8.1
蓝屏就像下面的链接:
编辑:这很奇怪,虽然它是通过安装Windows 10解决的,但事实并非如此。
我意识到只有当我关闭应用程序时才会发生这种情况。
答案 0 :(得分:1)
我认为你需要检查roi矩形是否适合图像区域。 detectMultiScale可以提供部分位于图像外的矩形。
答案 1 :(得分:0)
由于完全相同的问题,OpenCV 3可能会导致某些Nvidia驱动程序出现问题。更新到最新的图形驱动程序立即解决了问题!