我在嘗試一個攝像頭識別已經訓練好的xml檔案,但是呼叫攝像頭的時候出現問題,我呼叫攝像頭的代碼就是最簡單的初始化:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(){
VideoCapture cap(0); //打開默認攝像頭
if(!cap.isOpened()){
return -1;
}
Mat frame;
Mat edges;
Mat gray;
CascadeClassifier cascade;
bool stop =false;
cascade.load("haarcascade_frontalface_alt.xml");
Ptr<FaceRecognizer>modelPCA = createEigenFaceRecognizer();
modelPCA->load("MyFacePCAModel.xml");
while(!stop)
{
cap>>frame;
vector<Rect> faces(0);
cvtColor(frame,gray,CV_BGR2GRAY);
equalizeHist(gray,gray);//直方圖均值化
cascade.detectMultiScale(gray,faces,1.1,2,0|CV_HAAR_SCALE_IMAGE,Size(30,30));
Mat face;
Point text_lb;
for(size_t i=0;i<faces.size();i++)
{
if(faces[i].height>0&&faces[i].width>0)
{
face=gray(faces[i]);
text_lb=Point(faces[i].x,faces[i].y);
rectangle(frame,faces[i],Scalar(255,0,0),1,8,0);
}
}
Mat face_test;
int predictPCA=0;
if(face.rows>=120)
{
resize(face,face_test,Size(92,112));
}
if(!face_test.empty())
{
predictPCA=modelPCA->predict(face_test);
}
cout<<predictPCA<<endl;
if(predictPCA==35)
{
string name="shijunye";
putText(frame,name,text_lb,FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255));
}
imshow("face",frame);
if(waitKey(50)>=0)
stop=true;
}
return 0;
}
這是我全部的代碼,運行沒有報錯,但是最后出來這個畫面:

求知道的大神能告知問題所在。
提前感謝。
uj5u.com熱心網友回復:
建議樓主先編譯鏈接除錯OpenCV自帶的相關例子代碼。uj5u.com熱心網友回復:
你可以使用別的軟體打開攝像頭,看看攝像頭是否安裝正確,QQ之類的都可以uj5u.com熱心網友回復:
從你這個運行的效果來看,打開攝像頭的代碼是執行了的。你也可以驗證一下,在if(!cap.isOpened()){return -1; }這里把return-1換成你能直接看到的現象比如輸出一行文字什么的,來判斷攝像頭到底有沒有打開。如果攝像頭打開了但是結果依然是這樣的話就要考慮是不是你攝像頭的問題了。uj5u.com熱心網友回復:
有的筆記本打開攝像頭還得撥一個小DIP開關。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/84176.html
標籤:圖形處理/算法
