Я пытаюсь преобразовать входное изображение в строку, а затем вернуться к изображению, как полный цикл. Я получаю предупреждение Clang-Tidy: Use of a signed integer operand with a binary bitwise operator
с неожиданным побочным эффектом (объяснено на скриншотах ниже), когда пытаюсь указать CV_8UC3
или CV_8UC1
на основании моих знаний о входном изображении. Я не уверен, что это значит?
Мне уже известен подобный такой вопрос в другом контексте . Но я не уверен, как мой случай связан с этим вопросом.
Это мой код:
int main (int argc, char *argv[]) {
bool color = argv[1];
cv::Mat img = cv::imread("../images/input.jpg", color);
std::string img_str(img.begin<unsigned char>(), img.end<unsigned char>());
auto* buffer = (unsigned char *) img_str.c_str();
// Complaint happens at this line below
cv::Mat dummy = cv::Mat(img.rows, img.cols, color ? CV_8UC3 : CV_8UC1, buffer);
cv::imwrite("../images/output.jpg", dummy);
return 0;
}
Исходное изображение:
Когда color == CV_8UC3
:
Когда color == CV_8UC1
Ожидаемое поведение
Цветное изображение (копия входного изображения), когда color == CV_8UC3
Изображение в градациях серого для входного изображения, когда color == CV_8UC1