我正在使用TIF包含有符号整数数据的图像。成功输入并处理后,我需要以相同的格式输出图像(输入和输出* .tif文件)。使用OpenCV保存整数CV_32S图像
对于输入,我知道OpenCV不知道数据是有符号还是无符号的,所以它假定没有签名。使用this trick解决了这个问题(手动切换cv::Mat
的类型)。
但是,当我输出图像并重新加载时,我没有得到预期的结果。该文件包含多个段(像素组),并且格式如下(我必须使用此格式):具有值-9999
- 所有像素不属于任何段属于单个段具有相同的正整数值
- (例如第一分段的所有像素具有值
1
,第二2
等)
这里是EXA多个代码:
void ImageProcessor::saveSegments(const std::string &filename){
cv::Mat segmentation = cv::Mat(workingImage.size().height,
workingImage.size().width,
CV_32S, cv::Scalar(-9999));
for (int i=0, szi = segmentsInput.size(); i < szi; ++i){
for (int j=0, szj = segmentsInput[i].size(); j < szj; ++j){
segmentation.at<int>(segmentsInput[i][j].Y,
ssegmentsInput[i][j].X) = i+1;
}
}
cv::imwrite(filename, segmentation);
}
您可以假设所有变量(例如, workingImage
,segmentsInput
)作为全局变量存在。
使用此代码,当我输入图像和检查值时,大部分值设置为0
而设置的那些采用整个范围的整数值(在我的例子中我有20段)。
你保存矩阵的格式是什么? JPEG? – Sunreef
@Sunreef正如我在我原来的问题中所说的那样,它全是TIF格式 – penelope
你不能直接用imwrite保存整数矩阵。正如文档所述:“只有8位(或16位无符号(CV_16U),PNG,JPEG 2000和TIFF)单通道或3通道(具有'BGR'通道顺序)图像可以使用这个功能。“ – Sunreef