[問題] 把RGB轉成HSI

看板C_and_CPP (C/C++)作者 (皓皓)時間12年前 (2013/11/03 15:57), 編輯推噓1(1010)
留言11則, 3人參與, 最新討論串1/1
將圖從RGB轉HSI 我跑出來是一個很奇怪顏色的圖 不知道是不是公式打錯了?! 請問要怎麼解決呢?? 拜託了 >"< 感謝 附上程式碼 for(j=0;j < info.height;j++) { for(i=0;i < info.width;i++) { fread(&color,1,3,left); intensity = (color.R + color.G + color.B) / 3; if ((color.R + color.G + color.B) == 765) { saturation = 0; hue = 0; } minmum (color.R, color.G, color.B); if (intensity > 0) { did = minmum (color.R, color.G, color.B)/ intensity; saturation = 1 - did; } else if (intensity == 0) { saturation = 0; } color123 = (color.R*color.R) + (color.G*color.G) + (color.B*color.B) - (color.R*color.G) - (color.R*color.B) - (color.G*color.B); sqrt2 = (double) sqrt (color123); temp = (color.R - (color.G/2) - (color.B/2)) / ( sqrt2 ); if (color.G >= color.B) { hue = acos(temp); } else if (color.B > color.G) { hue = 360 - acos(temp); } fwrite(&hue,1,1,lena); fwrite(&intensity,1,1,lena); fwrite(&saturation,1,1,lena); } } 附上轉換公式 http://ppt.cc/2PBT -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.152.145 ※ 編輯: unixxxx 來自: 140.115.152.145 (11/03 16:03) ※ 編輯: unixxxx 來自: 140.115.152.145 (11/03 16:08)

11/03 16:33, , 1F
Color.R 跟 intensity 形態?不能都整數
11/03 16:33, 1F

11/03 17:04, , 2F
不如把轉換的程式碼獨立成一個函式,自己丟數字進去測
11/03 17:04, 2F

11/03 17:05, , 3F
確定功能正確後再加上檔案讀寫的部份。
11/03 17:05, 3F

11/03 17:32, , 4F
好比說像這樣 http://ideone.com/kDIR6J
11/03 17:32, 4F
我前面有打double intensity 和 struct Color{ unsigned double B; unsigned double G; unsigned double R; } 應該沒錯吧?! ※ 編輯: unixxxx 來自: 140.115.152.145 (11/03 19:24)

11/03 20:04, , 5F
struct 裡面的東西很有意思...
11/03 20:04, 5F

11/03 20:05, , 6F
一般rgb是用unsigned char 去宣告,要處理才轉double,此外
11/03 20:05, 6F

11/03 20:06, , 7F
在做fread/fwrite時,應會考慮到struct padding問題
11/03 20:06, 7F

11/03 20:07, , 8F
最後,unsigned double 這資料型態是不存在的。
11/03 20:07, 8F

11/03 20:10, , 9F
忘了說,如果檔案是bmp來源的話,還要再考慮每列對齊4的倍數
11/03 20:10, 9F

11/03 20:12, , 10F
另外你的角度是用度度量(360)計算,C/C++三角函式(如 acos)
11/03 20:12, 10F

11/03 20:13, , 11F
是用弳度量(2*PI,2*3.1415...)計算,這部份還要修過。
11/03 20:13, 11F
我又試了一下 圖的輪廓出來了 不過顏色不對... 所以我角度公式有問題 要改成pi ?! 照Ed大改後 沒問題了 感謝!! ※ 編輯: unixxxx 來自: 140.115.152.145 (11/04 17:08)
文章代碼(AID): #1ITW7zR6 (C_and_CPP)
文章代碼(AID): #1ITW7zR6 (C_and_CPP)