bool ReadImageToDatum(const string& filename, const int label, const int height, const int width, const bool is_color, const string& encoding, JDatum* datum) { cv::Mat cv_img = ReadImageToCVMat(filename, height, width, is_color); if (cv_img.data) { if (encoding.size()) { if ((cv_img.channels() == 3) && is_color == 1 && !height && !width && matchExt(filename, encoding)) { return ReadFileToDatum(filename, label, datum); } vector<uchar> buf; cv::imencode("." + encoding, cv_img, buf); datum->SetData(string(reinterpret_cast<char*>(&buf[0]), buf.size())); datum->SetLabel(label); datum->SetEncoded(true); return true; } CVMatToDatum(cv_img, datum); datum->SetLabel(label); return true; } else { return false; } }
TEST_F(IOTest, TestReadFileToDatum) { string filename = EXAMPLES_SOURCE_DIR "images/cat.jpg"; Datum datum; EXPECT_TRUE(ReadFileToDatum(filename, &datum)); EXPECT_TRUE(datum.encoded()); EXPECT_EQ(datum.label(), -1); EXPECT_EQ(datum.data().size(), 140391); }
TEST_F(IOTest, TestDecodeDatumToCVMatNativeGray) { string filename = EXAMPLES_SOURCE_DIR "images/cat_gray.jpg"; Datum datum; EXPECT_TRUE(ReadFileToDatum(filename, &datum)); cv::Mat cv_img = DecodeDatumToCVMatNative(datum); EXPECT_EQ(cv_img.channels(), 1); EXPECT_EQ(cv_img.rows, 360); EXPECT_EQ(cv_img.cols, 480); }
TEST_F(IOTest, TestDecodeDatumNativeGray) { string filename = EXAMPLES_SOURCE_DIR "images/cat_gray.jpg"; Datum datum; EXPECT_TRUE(ReadFileToDatum(filename, &datum)); EXPECT_TRUE(DecodeDatumNative(&datum)); EXPECT_FALSE(DecodeDatumNative(&datum)); Datum datum_ref; ReadImageToDatumReference(filename, 0, 0, 0, false, &datum_ref); EXPECT_EQ(datum.channels(), datum_ref.channels()); EXPECT_EQ(datum.height(), datum_ref.height()); EXPECT_EQ(datum.width(), datum_ref.width()); EXPECT_EQ(datum.data().size(), datum_ref.data().size()); const string& data = datum.data(); const string& data_ref = datum_ref.data(); for (int i = 0; i < datum.data().size(); ++i) { EXPECT_TRUE(data[i] == data_ref[i]); } }
inline bool ReadFileToDatum(const string& filename, Datum* datum) { return ReadFileToDatum(filename, -1, datum); }