2

我将使用 OpenCV 的级联训练功能。但在此之前我需要准备训练数据。我只想知道如果我的阳性样本具有透明度,OpenCV是否可以支持它?例如,如果我想让分类器了解车辆的外观,那么我可以提供车辆站在透明背景上的正样本图像吗?

4

1 回答 1

1

正如上面评论中提到的,haar 特征仅在灰度图像上计算。正如您所提到的,这可能会造成问题,因为默认颜色 0 可能会导致“轮子”失去对比度。您可能可以“标准化”透明颜色,而不是将其默认为 0。

第一件事是您可以加载所有 4 个通道(包括您的 alpha 通道),然后使用 alpha 通道将透明部分设置为某个值。

蟒蛇版本

I = cv2.imread("image.jpg", cv2.CV_LOAD_IMAGE_UNCHANGED)
alpha = I[:, :, 3]
G = cv2.cvtColor(I, cv2.COLOR_BGRA2GRAY)
G[alpha == 0] = 125  # Set transparent region to 125. Change to suit your needs.

C++

vector<cv::Mat> channels;
cv::split(I, channels);
cv::Mat alpha = channels[3];
alpha = 255 - alpha;  // Invert mask so we select the transparent regions.
cv::Mat G = cv::cvtColor(I, cv::COLOR_BGRA2GRAY);
G.setTo(cv::Scalar(125), alpha);

需要注意的是,我认为您可能必须小心上面的一些操作,例如,使用 alpha 和“alpha = 255 - alpha;”加载图像。我相信它们仅在更高版本的 OpenCV 中可用。我正在使用 OpenCV 2.4.7,它可以工作(对于 python 版本。我没有尝试过 C++,但它应该是一样的)。因此,如果事情不起作用,请检查您的 OpenCV 版本是否支持这些操作。如果没有,有办法绕过它们。

于 2014-01-09T10:21:38.313 回答