我正在尝试将输入图像转换为字符串,然后像完整的循环一样返回图像。当我尝试根据对输入图像的了解尝试指定Clang-Tidy: Use of a signed integer operand with a binary bitwise operator
或CV_8UC3
时,收到带有意外副作用的CV_8UC1
警告(在下面的屏幕快照中说明)。我不确定这是什么意思?
我已经知道了similar such question in a different context。但是我不确定我的案子与那个问题有什么关系。
这是我的代码:
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
时 最佳答案
我自己通过以下替代方式转换了图像字符串图像来解决了这个问题:
std::string ImageToString(const cv::Mat &img) {
cv::Mat1b linear_img(img.reshape(1));
return std::string(linear_img.begin(), linear_img.end());
}
此后,转换后的字符串/图像就完美了。