| 177 | } |
| 178 | |
| 179 | void writeMatrix(const Mat &m, const QString &fileName, const QString &targetSigset, const QString &querySigset) |
| 180 | { |
| 181 | bool isMask = false; |
| 182 | if (m.type() == OpenCVType<BEE::MaskValue,1>::make()) |
| 183 | isMask = true; |
| 184 | else if (m.type() != OpenCVType<BEE::SimmatValue,1>::make()) |
| 185 | qFatal("Invalid matrix type, .mtx files can only contain single channel float or uchar matrices."); |
| 186 | |
| 187 | const int elemSize = isMask ? sizeof(BEE::MaskValue) : sizeof(BEE::SimmatValue); |
| 188 | const QString matrixType = isMask ? "B" : "F"; |
| 189 | |
| 190 | char buff[4]; |
| 191 | QFile file(fileName); |
| 192 | QtUtils::touchDir(file); |
| 193 | if (!file.open(QFile::WriteOnly)) |
| 194 | qFatal("Unable to open %s for writing.", qPrintable(fileName)); |
| 195 | file.write("S2\n"); |
| 196 | file.write(qPrintable(targetSigset)); |
| 197 | file.write("\n"); |
| 198 | file.write(qPrintable(querySigset)); |
| 199 | file.write("\n"); |
| 200 | file.write("M"); |
| 201 | file.write(qPrintable(matrixType)); |
| 202 | file.write(" "); |
| 203 | file.write(qPrintable(QString::number(m.rows))); |
| 204 | file.write(" "); |
| 205 | file.write(qPrintable(QString::number(m.cols))); |
| 206 | file.write(" "); |
| 207 | const int endian = 0x12345678; |
| 208 | memcpy(&buff, &endian, 4); |
| 209 | file.write(buff, 4); |
| 210 | file.write("\n"); |
| 211 | file.write((const char*)m.data, m.rows*m.cols*elemSize); |
| 212 | file.close(); |
| 213 | } |
| 214 | |
| 215 | void readMatrixHeader(const QString &matrix, QString *targetSigset, QString *querySigset) |
| 216 | { |
no test coverage detected