关于此的文档似乎非常不稳定.
我基本上有一个空的IplImage*数组(IplImage**imageArray),我正在调用一个函数来导入一个cv :: Mats数组 - 我想将我的cv :: Mat转换为IplImage*所以我可以将其复制到数组中.
目前我正在尝试这个:
while(loop over cv::Mat array)
{
IplImage* xyz = &(IplImage(array[i]));
cvCopy(iplimagearray[i], xyz);
}
Run Code Online (Sandbox Code Playgroud)
这会产生段错误.
还尝试:
while(loop over cv::Mat array)
{
IplImage* xyz;
xyz = &array[i];
cvCopy(iplimagearray[i], xyz);
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个编译时错误:
error: cannot convert ‘cv::Mat*’ to ‘IplImage*’ in assignment
坚持我如何进一步,并希望一些建议:)
我使用以下代码在人脸检测代码中从图像裁剪出人脸。但是我没有得到正确的人脸图像,而是得到了一部分图像而不是脸部图像。我的代码有什么问题?
_faceCascade.detectMultiScale(mat, faces, 1.1, 2, kHaarOptions, cv::Size(40, 40));
Run Code Online (Sandbox Code Playgroud)
并且在displayfaces函数内部使用以下代码进行裁剪:
CGRect cropRect = CGRectMake(faces[i].x, faces[i].y, faces[i].width, faces[i].width);
CGImageRef cropped_img = CGImageCreateWithImageInRect(self.storeImage.CGImage, cropRect);
UIImage *img = [UIImage imageWithCGImage:cropped_img];
UIImageWriteToSavedPhotosAlbum( img, self, nil,nil);
Run Code Online (Sandbox Code Playgroud)
正在获取的正确坐标faces[i]。但是问题仅在于裁剪和设置ROI。有人可以帮我解决吗?
我也尝试使用下面的代码,再次获得相同的图像。(即没有得到实际的人脸图像)
cv :: Mat image_roi;
cv::Rect roi(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
cv::Mat(testMat, roi).copyTo(image_roi);
UIImage *img = [CaptureViewController imageWithCVMat:image_roi ];
UIImageWriteToSavedPhotosAlbum( img, self, nil,nil);
Run Code Online (Sandbox Code Playgroud)
注意:我正在使用opencv facedetect在实时视频流中检测人脸。我可以得到脸周围的绿色矩形。但是我无法使用人脸参数裁剪人脸。我也尝试设置faceroi来检测眼睛,即使失败了。为了缩小问题的范围,问题可能出在为图像设置ROI吗?
13年11月2日更新:
我的裁剪如下,但是ROI设置不正确,图像裁剪不佳:
我在上面的帖子中找到了问题(感谢@Jameo指出这是由于旋转问题。)我已经如下旋转了图像。
UIImage *rotateImage = [[UIImage alloc] initWithCGImage: image.CGImage
scale: 1.0
orientation: UIImageOrientationRight];
Run Code Online (Sandbox Code Playgroud)
然后使用以下代码裁剪图像:
// get sub image
+ (UIImage*) getSubImageFrom: …Run Code Online (Sandbox Code Playgroud)