我正在使用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