【发布时间】:2012-09-29 04:49:53
【问题描述】:
我在 Android 上使用这个 opencv 代码进行强度均衡。执行时间约为每帧 300 毫秒 (720x480)。有人对可能的时间优化有想法吗?
代码如下:
cvtColor(image, hsvImage, CV_BGR2HSV);
// Get intensity
intensity = hsvImage.at<Vec3b>((int)reference.Point_::y, (int)reference.Point_::x);
float value = (float)REGULAR_INTENSITY / intensity[2];
float saturation = (float)REGULAR_SATURATION / intensity[1];
if (counter == 15 && (int)intensity[2] < REGULAR_INTENSITY) {
equalization = false;
}
// Modify intensity
float transformedSaturation, transformedValue;
for(int i = 0; i < hsvImage.rows; i++) {
unsigned char *data = hsvImage.ptr(i);
for(int j = 0; j < hsvImage.cols; j++) {
transformedSaturation = (uchar)*++data * saturation;
if (transformedSaturation > MAX_COLOR) {
transformedSaturation = MAX_COLOR;
}
*data++ = transformedSaturation;
transformedValue = (uchar)*data * value;
if (transformedValue > MAX_COLOR) {
transformedValue = MAX_COLOR;
}
*data++ = transformedValue;
}
}
cvtColor(hsvImage, image, CV_HSV2BGR);
【问题讨论】:
-
你有没有发现哪段代码消耗的时间最多?在 cvtColor 和主循环上花费了多少时间?
-
最后一行:CV_HSV2BGR转换。我认为没有什么可以做的。
-
考虑使用 gpu::cvtColor 进行颜色转换,如果适用的话。
标签: android c++ optimization image-processing opencv