我正在尝试将较小的图片复制到较大的框架上。但是我无法使它工作。它可以编译,但不显示任何内容。我的目标是将识别出的脸部复制到较大的原始框架中。
//NEW
Mat face_resized;
//NEW
for(int i = 0; i < faces.size(); i++) {
// Process face by face:
Rect face_i = faces[i];
// Crop the face from the image. So simple with OpenCV C++:
Mat face = gray(face_i);
// Resizing the face is necessary for Eigenfaces and Fisherfaces. You can easily
// verify this, by reading through the face recognition tutorial coming with OpenCV.
// Resizing IS NOT NEEDED for Local Binary Patterns Histograms, so preparing the
// input data really depends on the algorithm used.
//
// I strongly encourage you to play around with the algorithms. See which work best
// in your scenario, LBPH should always be a contender for robust face recognition.
//
// Since I am showing the Fisherfaces algorithm here, I also show how to resize the
// face you have just found:
//NEW
face_resized=images[images.size()-1];
//Mat face_resized=images[images.size()-1];
//NEW
cv::resize(face, face_resized, Size(im_width, im_height), 1.0, 1.0, INTER_CUBIC);
//model->setLabelsInfo(labelsInfo);
// Now perform the prediction, see how easy that is:
int prediction = model->predict(face_resized);
double confidence = 0.0;
model->predict(face_resized,prediction,confidence);
// And finally write all we've found out to the original image!
// First of all draw a green rectangle around the detected face:
rectangle(original, face_i, CV_RGB(0, 255,0), 1);
和:
//NEW
cv::Rect roi = cv::Rect(50,50, face_resized.cols, face_resized.rows);
cv::Mat subview = original(roi);
subview.copyTo(original);
//NEW
while(tmp!=0) {
putText(original, tmp->name, Point(10,y),FONT_HERSHEY_PLAIN,1.0,CV_RGB(100,100,0),1.0);
y+=10;
tmp=tmp->next;}
}
imshow("face_recognizer", original);
(我只复制了相关部分,如果需要,可以发布更多内容)。
最佳答案
CopyTo
方法将矩阵数据复制到另一个矩阵。在复制数据之前,该方法将调用m.create(this->size(), this->type())
,以便在需要时重新分配目标矩阵。即copyto
适用于相同大小的矩阵。从您的示例代码中,
cv::Mat subview = original(roi);
subview.copyTo(original);
我看到您正在从
subview
中获取roi(original
)并再次将其处理为original
。由于original
(大框架)的大小与subview
(小)的大小不同,因此原始框架已通过copyTo
方法重新分配为subview
的大小。要将小框架复制到大框架,您需要定义掩码并将其发送到copyTO
以仅复制该部分(小框架),或者修改subview
,因为它是原始框架数据矩阵的一部分。关于c++ - opencv将较小的图片放入较大的拷贝中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37783774/