簡體   English   中英

在opencv中寫入可產生黑白圖像

[英]imwrite in opencv gives a black/white image

我用C API編寫了分水嶺分割的代碼。 現在,我將所有這些都轉換為C ++。 因此,cvsaveimage會被寫入。 但是當我使用imwrite時,我得到的只是一張黑色圖像。

這是代碼:-

Mat img8bit;
Mat img0;
img0 = imread("source.png", 1);           
Mat wshed(img0.size(), CV_32S);
wshed.setTo(cv::Scalar::all(0));
////after performing watershed segmentation and
        // displaying the watershed image from wshed//
wshed.convertTo(img8bit, CV_32FC3, 255.0);
imwrite("Watershed.png", img8bit);

我要保存的原始圖像處於亂碼狀態。 我從網上看到了一些建議,我們需要將其轉換為16位或更高版本,以使寫入內容可以正確保存。 如你所見,我嘗試過。 但是,使用imshow時,波紋圖像可以正確顯示。img0為灰色圖像/黑白,而波紋圖像為彩色。 有什么幫助嗎?

編輯-我將第四行更改為

Mat wshed(img0.size(), CV_32FC3);

當使用標量(在您的情況下為255 Mat::convertTo()調用Mat::convertTo()時,每個矩陣項的值都將乘以該標量值。 這將導致幾乎所有結果像素值都超過255(即白色像素),但0的結果仍保持0(即黑色像素)。 這就是為什么最終會得到黑白像素的原因。

要使其工作,只需將其更改為:

wshed.convertTo(img8bit, CV_32FC3);

你說:

我要保存的原始圖像處於亂碼狀態。 我從網上看到了一些建議,我們需要將其轉換為16位或更高版本,以使寫入內容可以正確保存。

如果保存圖像不起作用,則應記住使用imwrite函數時,圖像數據必須是8位或16位無符號的 ,而不是16位或更高。

這在文檔中說明

imwrite函數將圖像保存到指定文件。 根據文件擴展名選擇圖像格式(有關擴展名列表,請參見imread())。 使用此功能只能保存8位(在PNG,JPEG 2000和TIFF情況下為16位無符號(CV_16U))單通道或3通道(具有“ BGR”通道順序)圖像 如果格式,深度或通道順序不同,請在保存之前使用Mat :: convertTo()和cvtColor()進行轉換。 或者,使用通用的FileStorage I / O功能將圖像保存為XML或YAML格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM