Matlab에서 C++ 함수를 실행할 때 다음 오류가 발생했습니다.Matlab C++에서 OpenCV cvtColor 오류
WARNING: Couldn't read movie file example.avi
Unexpected Standard exception from MEX file.
What()
is:/tmp/A3p1_2964_800/batserve/A3p1/maci64/OpenCV/modules/imgproc/src/color.cpp:3256:
error: (-215) scn == 3 || scn == 4 in function cvtColor
..
Error in rundemo (line 2)
r = facedetection(inputVideo);
다음은 내가 face_cascade_name에 할당 된 경로에 문제가있는 facedetection.cpp
#include <iostream>
#include <vector>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include "mex.h"
using namespace std;
using namespace cv;
vector<Rect> detect(Mat img, CascadeClassifier face_cascade){
vector<Rect> faces;
Mat img_gray;
cvtColor(img, img_gray, COLOR_BGR2GRAY);
face_cascade.detectMultiScale(img_gray, faces, 1.1, 2);
return faces;
}
void mexFunction(int nlhs, mxArray *plhs[ ],int nrhs, const mxArray *prhs[ ]){
VideoCapture inputVideo(mxArrayToString(prhs[0]));
Mat img;
inputVideo >> img;
string face_cascade_name = "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml";
CascadeClassifier face_cascade;
face_cascade.load(face_cascade_name);
vector<Rect> rects = detect(img,face_cascade);
int numFaces = rects.size();
plhs[0] = (mxArray *) mxCreateNumericMatrix(numFaces,4,mxDOUBLE_CLASS,mxREAL);
double* outPtr = mxGetPr(plhs[0]);
for(int i = 0; i < numFaces; i++){
Rect rect = rects[i];
outPtr[i+0*numFaces] = rect.x;
outPtr[i+1*numFaces] = rect.y;
outPtr[i+2*numFaces] = rect.width;
outPtr[i+3*numFaces] = rect.height;
}
}
것 같아요 코드입니다. 이 코드는 Windows 컴퓨터에서 다른 경로로 옮긴 다음 Mac을 사용하기 때문에 표시된 경로로 변경했습니다. 내 컴퓨터의 haarcascade_frontalface_alt.xml 경로입니다. 도와 주셔서 감사합니다!
'facedetection.m'의 내용을 표시하십시오. – herohuyongtao
'facedetection.m'이 없습니다. 그것은'facedetection.cpp'입니다. 감사! – heihei