void GrayFilterCommand::apply_filter(IplImage* image) {
if (!image) {
throw ....
}
IplImage *gray_image = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
if (!gray_image) {
throw ....
}
cvCvtColor(image, gray_image, CV_BGR2GRAY);
image = cvCloneImage(gray_image); // does not work
}
我不能返回图像,所以我返回gray_image。如何保存图像中的gray_image ?
image = cvCloneImage(gray_image);
或
image = gray_image
不工作
上面的代码可能会导致内存泄漏(谁来释放image或gray_image ?)
的正确方法(使用c++ API)应该是:
void GrayFilterCommand::apply_filter(const Mat & rgb_image, Mat & gray_image) {
cv::cvtColor(rgb_image, gray_image, CV_BGR2GRAY);
}
你甚至不会考虑在c++中为它创建一个函数