将图像存储在垫子矢量中
Storing images in mat vector
我正在使用opencv face tetector在图像中找到面部。我正在尝试将多个不同面孔存储在矢量中。看来我多次存储相同的存储。这是我的代码:
face_cascade.detectMultiScale( gray_image, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE );
Rect faceRect, eyeRect, temp;
//draw a rectangle for all found faces in the vector array on the original
image
cout<< faces.size()<<endl;
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);
rectangle(image, pt1, pt2, cvScalar(0, 255, 0, 0), 3, 8, 0);
//Create the cropped image
if(!faces.empty()){
faceRect = cvRect(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
croppedFaceImage = gray_image(faceRect).clone();
resize(croppedFaceImage,resizedcroppedFaceImage,Size(60,60),0,0,INTER_LINEAR);
char k;
imshow("new", resizedcroppedFaceImage);
k = waitKey(0);
if (k== 'ESC') {destroyAllWindows();}
diFaces.push_back(resizedcroppedFaceImage);
}
else if(faces.empty())
{resize(gray_image,resizedcroppedFaceImage,Size(60,60),0,0,INTER_LINEAR); break;}
}
当我imshow justroppedfacemimage时,一切都可以,但是当我试图进一步扩散时,它会显示出相同的图像。是否有关于push_back并存储相同图像的解释?
,由于您对调整大小的croppedfaceimage的定义是 exiph 您确实重复使用所有图像的相同的垫子结构(包括数据指针),因此它们是所有相同(将它们推入矢量结果仅是浅副本)。
所以,要么推克隆():
diFaces.push_back( resizedcroppedFaceImage.clone() );
或使循环内的局部var变为尺寸的杂质图像,因此它是每次通过的新鲜垫子。
相关文章:
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 存储将单个查询图像与多个图像的列表匹配的关键点索引
- 如何将捕获的图像存储在OpenCV中(将图片保存到计算机)
- 如何将多个图像存储到多个矩阵中
- 存储在矢量中的图像都是相同的
- 如何创建矩阵的矢量来存储大量的图像
- 对整个垫子图像进行排序并在 OpenCV 中存储索引
- 将图像存储在垫子矢量中
- 获取存储在矩阵中的图像 ROI 的平均 R、G 和 B
- 如何以最佳方式将高分辨率图像数据存储在无符号字符*中C++
- 如何将来自不同图像的多个描述符存储在C++和OpenCV中的向量向量中
- 为 ppm/pgm 图像数据创建存储
- 从数据库中以 blob 数据类型形式存储的原始图像数据中检索 CImage 对象
- OpenCV代码将存储在列表中的描述符与新的图像描述符进行比较
- 如何将图像中的每个像素作为16位索引存储到颜色表中
- 存储矢量的精确内存图像
- 如何将图像存储为 1*n 浮点向量
- 逐像素比较2个图像(第一个图像存储在数据库中)
- 多图像存储kinect与不同的名称
- 如何从网络摄像机获取图像并将图像存储在openCV中