在CV 人工智能模型中,通常是用3通道数据进行训练。在遇到4通道png图片时,需要预处理转换为3通道后再行处理。通常有两种方法:
1。 不保持颜色,只需要突显图案:
std::vector<cv::Mat> channels(4);
cv::split(oriImg, channels);
// Merge BGR
cv::Mat newImg;
std::vector<cv::Mat> bgrChannels = { channels[2], channels[1], channels[0] };
cv::merge(bgrChannels, newImg);
// Inverting the alpha channel
cv::Mat notAlpha;
cv::bitwise_not(channels[3], notAlpha);
cv::cvtColor(notAlpha, notAlpha, cv::COLOR_GRAY2BGR);
// Apply the alpha mask to the BGR image
cv::Mat maskedNewImg;
cv::bitwise_and(newImg, newImg, maskedNewImg, channels[3]);
// Check the mean color
cv::Scalar meanColor = cv::mean(maskedNewImg);
if (meanColor[0] <= 0.0 && meanColor[1] <= 0.0 && meanColor[2] <= 0.0) {
maskedNewImg += notAlpha;
}
else {
cv::bitwise_not(maskedNewImg, maskedNewImg);
}
2. 保持原始色彩,只去掉alpha通道
cv::Mat dst;
oriImg.convertTo(dst, oriImg.type(), 1.0, 0.0); // 复制所有通
目标检测类任务,建议用方法2; OCR之类文字检测任务(只需要轮廓),建议用方法1.
文章评论