2014-09-30 23 views
0

我試圖理解我爲什麼不從下面的代碼行獲得預期的結果:爲什麼這PBM圖像的行爲古怪

pix=np.asarray(Image.open(File))) #I am reading a pbm file into memory 
img = Image.fromarray((pix), '1') #rewriting 
img.save("test1.pbm") 

newpix=~pix #inverting the image 
img = Image.fromarray((newpix), '1') 
img.save("test2.pbm") 

原始圖像和test1.pbm(圖像1)是相同的,但test2.pbm(圖片2)不是我所期望的(前景像素變成背景像素,反之亦然)。我在這裏附上圖片(轉換爲jpeg)。我究竟做錯了什麼?

另一個問題是,對於test1.pbm中的大多數前景像素,該值爲False。但這並不反映在已保存的圖像中。

我使用Imagemagick將這兩幅圖像從原始圖像http://www.mathgoodies.com/lessons/graphs/images/line_example1.jpg轉換而來。 test1.jpg

test2.jpg

回答

0

我不承認你使用哪種語言,但你的原始圖像,當與ImageMagick的這樣的轉換:

convert cdLTY.jpg -negate out.jpg 

看起來是這樣的:

enter image description here

所以我推斷問題在於你的反演。我不知道是什麼

newpix=~pix 

確實(可能complelementing它還是反轉所有位?),但我認爲你需要subtract從255每個像素翻轉你的形象,因此,如果一個像素10原圖像,它需要在新圖像中爲255-10245

說明

像素通常與0 =黑色,255 =白色編碼。因此,如果您的像素最初是黑色的(0),那麼當您執行new pixel = 255 - original value時,它將變爲255-0255,這意味着它現在變爲白色。同樣,如果一個像素以白色開始(255),則當您執行255-255時,您會得到0,現在它變成黑色。

+0

我使用Python和原始圖像,當讀取時,返回一個布爾數組。 – rivu 2014-09-30 15:42:06

+0

如果您在執行img.save(「test1.pbm」)之前將'img'的元素乘以255,會發生什麼?如果你然後計算'newpix'的每個元素爲'255-oldvalue'? – 2014-09-30 16:13:21