这是我尝试改善图像颜色的函数。它有效,但真的很慢......也许有人有更好的主意?
static Mat correctColor(Mat AImage) {
Mat copyImage;
AImage.copyTo(copyImage);
Mat imgLab;
cvtColor(copyImage, imgLab, CV_BGR2Lab);
for (int y = 0; y < imgLab.rows; y++) {
for (int x = 0; x < imgLab.cols; x++) {
//get pixel value
imgLab.ptr<uchar > (y)[x * 3] = imgLab.ptr<uchar > (y)[x * 3]*0.3;
}
}
cvtColor(imgLab, copyImage, CV_Lab2BGR);
Mat img(copyImage.rows, copyImage.cols, CV_32FC3);
copyImage.convertTo(img, CV_32FC3, 1 / 255.);
blur(img, img, Size(255, 255));
Mat img32(copyImage.rows, copyImage.cols, CV_32FC3);
copyImage.convertTo(img32, CV_32FC3, 1 / 255.);
img.mul(img, 2);
divide(img32, img, img);
img.convertTo(copyImage, CV_8U, 255.0);
return copyImage;
}
主要问题是您在内存中创建原始图像的多个副本:AImage、copyImage、imgLab、img、img32。
第一个优化应该是@Eric 建议的(通过引用传递):
static Mat correctColor(Mat& AImage) {
至于代码的其余部分,看看是否可以减少使用的副本数量。
OpenCV 有一个GPU模块它在 GPU 中实现了多种功能,包括cv::blur()
。此实现基于 CUDA 框架,因此如果您的显卡是 NVIDIA,那么您很幸运:gpu::blur() http://opencv.itseez.com/modules/gpu/doc/image_filtering.html#gpu-blur.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)