Just a Computer Graphics Studio & My Life

喜歡視覺觀感的我,一直在處理RGB影像,還沒有實際去產生RGBA影像,只有最近拿人家已經做好的PNG美術影像來做APP,一直對透明度懵懵懂懂。在影像中的每一個像素,RGB有24bits,而RGBA則有32bits,如此想像,只要創建的影像每個像素配給它32bits,即可產生具透明度的影像

以下程式跑出來具透明度的PNG影像,RGBA=(0, 127, 255, 127)。

happyman_IplImage

/**
	Theme: Create Transparency Image
	Compiler: Dev C++ 4.9.9.2
	Library: OpenCV 2.0
	Date: 102/05/09
	Author: HappyMan
	Blog: https://cg2010studio.wordpress.com/
*/
#include <highgui.h>
#include <cv.h>

using namespace cv;
IplImage *img;

int main()
{
	img = cvLoadImage("happyman.jpg", CV_LOAD_IMAGE_COLOR);
	CvScalar color;
	color.val[0]= 255; //Blue
	color.val[1]= 127; //Green
	color.val[2]= 0; //Red
	color.val[3]= 127; //Alpha

	Mat image_Mat(img->height, img->width, CV_8UC4, color);

	//轉型
	IplImage *image_IplImage = new IplImage(image_Mat);
	//存IplImage成png檔
	cvSaveImage("happyman_IplImage.png",image_IplImage);
	//存Mat成png檔
	imwrite("happyman_Mat.png",image_Mat);
	cvWaitKey(0);
	return 0;
}

關鍵是這一個常數CV_8UC4,8(bit)x4(channel)=32(bit)。

這是矩陣參數的命名規則,是大寫CV_(位元數)+(資料型態)+(Channel數),全部的矩陣參數如下所示:

CV_8UC1 CV_8SC1 CV_16UC1 CV_16SC1 CV_32SC1 CV_32FC1 CV_64FC1
CV_8UC2 CV_8SC2 CV_16UC2 CV_16SC2 CV_32SC2 CV_32FC2 CV_64FC2
CV_8UC3 CV_8SC3 CV_16UC3 CV_16SC3 CV_32SC3 CV_32FC3 CV_64FC3
CV_8UC4 CV_8SC4 CV_16UC4 CV_16SC4 CV_32SC4 CV_32FC4 CV_64FC4

裡面的位元數,分別代表8bits、16bits、32bits、64bits資料型態;U代表Unsign Integer,無正負號整數型態;S代表Sign Integer,正負號整數型態;F代表Float,浮點數型態;Channel數的部份,C1代表單通道,C2代表兩個通道,C3代表三個通道,以此類推;這裡的通道表示的是色彩空間的維度,像BMP和JPG格式的RGB格式它的Channel就是3,說簡單一點的話C1代表一個二維陣列,C2代表兩個二維陣列,C3代表三個二維陣列,以此類推。

程式跑出來的結果就是首圖,接下來有一些疑問,我先再產生一張影像,RGBA=(0, 127, 255, 255),可以看到下圖和首圖的深淺度,的確有透明度的影像看起來顏色比較淺,但卻不能知道是不是真的有透明度,只好用影像處理軟體來驗證它!

happyman_IplImage255

於是我用了Picasa來顯示首圖,看得到棋盤狀表示它真的有透明度!只是Picasa卻不能編輯PNG影像……當初我還以為這個軟體壞掉,點了老半天:(

happyman_Picasa

接著我拿PhotoImpactPicPick來顯示首圖,真是奇妙得好莫名~這兩個都能顯示編輯影像,但結果都跟Picasa顯示不一樣……

Create Transparency Image

這裡我可是拿首圖來顯示,PicPick顯示完全不透明,而PhotoImpact則顯示完全透明!我把藍色一部分複製到透明上頭,來做滴管實驗看它的RGBA的值各為多少,結果就是遮罩值不是255就是0,怎麼無法顯示0-255之間的透明度呢?不過PI找張PNG檔且像素透明度不一來測試,得到的結果是像素們的遮罩可以介於0-255呢!點圖放大即可看到軟體視窗下方狀態,我把滴管放在藍色部份。

本來還想拿到全世界最知名的PhotoShop測試,只是手邊沒有軟體,就太可惜了……看來影像處理軟體間是有相容性的問題(複製和貼上),而且對每一種影像格式支援度不大相同,要是精通程式設計影像處理,大概也可以寫出像樣的影像處理軟體囉~

參考:OpenCV 創建透明背景圖片(png)命名規則

廣告

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: