日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

利用opencv读取图片将其作为opengl的纹理图片的实现方法

發(fā)布時(shí)間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用opencv读取图片将其作为opengl的纹理图片的实现方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在opengl中實(shí)現(xiàn)三維物體的紋理貼圖的第一步就是要讀入圖片,然后指定該圖片為紋理圖片。我最早接手的項(xiàng)目中是通過一個(gè)專門的讀取bmp圖片的函數(shù)來實(shí)現(xiàn)紋理圖片的讀取的。這個(gè)函數(shù)有三個(gè)缺點(diǎn):

1、只能讀取bmp的圖片,無法讀取jpg,ppm等其他類型的圖片,要想使用其他類型的圖片,必須事先將他們轉(zhuǎn)化成bmp的圖片;

2、只能讀取2的冪次方寬和2的冪次方長(zhǎng)的大小的圖片,否則函數(shù)無法正確讀取圖片內(nèi)容;

3、只能讀取24位的bmp圖片。

???上述三個(gè)缺點(diǎn)使我們的程序有了很大的局限性。為此,在學(xué)習(xí)了opencv之后,我利用opencv中的cvloadimage()函數(shù)解決了上述問題。

我們的解決方法如下:

?? 首先利用下面這行代碼將圖片讀取到內(nèi)存中:

???IplImage * Iface = cvLoadImage(szFileName);

?? 然后利用下面代碼在內(nèi)存中開辟一個(gè)跟讀入圖片大小相同的內(nèi)存空間:

??m_new_face_BMPbytes = (unsigned char *)malloc(sizeof(unsigned char)*Iface->imageSize);

??如果我們讀取的是24位的rgb彩色圖片,那么Iface->imageSize幾位圖片的像素大小乘以3,比如我們的圖片是512*512大小的那么Iface->imageSize就是512*512*3.

??接著我們利用下面的代碼將Iface中的圖片的實(shí)際數(shù)據(jù)部分拷貝到我們制定的內(nèi)存空間中:

??memcpy(m_new_face_BMPbytes,Iface->imageData,sizeof(unsigned char)*Iface->imageSize);

??Iface->imageData為存儲(chǔ)圖片像素?cái)?shù)據(jù)的空間的首地址

??然后我們保存圖片的大小:

? m_new_face_width = Iface->width;
? m_new_face_Height = Iface->height;

??最后我們?cè)O(shè)置將m_new_face_BMPbytes指向的圖片數(shù)據(jù)制定為opengl中的紋理圖片:

?glGenTextures(1, &m_texName); //1表示生成紋理的數(shù)量,m_texName用來存儲(chǔ)生成紋理的索引,在綁定紋理的時(shí)候用到

??glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
?glDisable(GL_LIGHTING);
?glEnable(GL_TEXTURE_2D);
?
?glBindTexture(GL_TEXTURE_2D,?m_texName);
?glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
?glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
?glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
?glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
?glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,?m_new_face_width,?m_new_face_Height, 0,
??GL_BGR_EXT, GL_UNSIGNED_BYTE,?m_new_face_BMPbytes);

這樣我們就完成了將我們讀入的圖片設(shè)置成為opengl的紋理圖片的設(shè)置了。

總結(jié)

以上是生活随笔為你收集整理的利用opencv读取图片将其作为opengl的纹理图片的实现方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。