【发布时间】:2016-07-06 20:23:07
【问题描述】:
背景信息:我需要加载一些 16 位灰度 PNG。
Caffe 是否支持通过ImageDataLayer 加载 16 位图像?
经过一番谷歌搜索,答案似乎并非如此。
ImageDataLayer 依赖于 this io routine
cv::Mat ReadImageToCVMat(const string& filename,
const int height, const int width, const bool is_color) {
cv::Mat cv_img;
int cv_read_flag = (is_color ? CV_LOAD_IMAGE_COLOR :
CV_LOAD_IMAGE_GRAYSCALE);
cv::Mat cv_img_origin = cv::imread(filename, cv_read_flag);
if (!cv_img_origin.data) {
LOG(ERROR) << "Could not open or find file " << filename;
return cv_img_origin;
}
if (height > 0 && width > 0) {
cv::resize(cv_img_origin, cv_img, cv::Size(width, height));
} else {
cv_img = cv_img_origin;
}
return cv_img;
}
使用opencv的cv::imread函数。除非设置了适当的标志,否则此函数会将输入读取为 8 位
CV_LOAD_IMAGE_ANYDEPTH - 如果设置,则返回 16 位/32 位图像,当 输入有对应的深度,否则转换为8位。
仅仅添加适当的标志是行不通的,因为稍后在代码 [io.cpp] 中他们检查 8 位深度:
void CVMatToDatum(const cv::Mat& cv_img, Datum* datum) {
CHECK(cv_img.depth() == CV_8U) << "Image data type must be unsigned byte";
... }
我可以删除支票,但我担心它的存在是有原因的,并且可能会发生不可预知的结果。 任何人都可以阐明这个问题吗?
【问题讨论】:
标签: image-processing machine-learning neural-network deep-learning caffe