osg與OpenCV影象互轉
因研究需要,這幾天想把Opecv獲取的視訊幀轉到OSG中作為紋理背景輸出,關鍵的一步就是Opencv幀影象的傳遞。
那麼問題來了:Opencv存放影象資料的格式和OSG的差異大嗎?
因為自己也是個新手,首先找到了
osg抓幀放到openCV裡
http://wenku.baidu.com/link?url=PXeAHmmV7vyA7s2fEK30_gEQvJzpHA9uDl9y1YIUHstCXCj_HKOTGjs_5PMnesuFDocCapTlBOyp5UjzWDu0LE7VayoDq98X3jzpPpyiQCm
原作者無從可考,但是留下了一句重要的程式碼:
memcpy((unsigned char*)pIplImg->imageData,pCImg->data(),pCImg->getImageSizeInBytes());
給出的資訊就是兩者資料轉換,只要知道長和寬,以及畫素資料的指標位置就可以了。完整的程式碼如下:
IplImage* CImage2IplImage(osg::ref_ptr<osg::Image> pCImg,IplImage *pIplImg){ //輸出影象設定 pIplImg->origin=IPL_ORIGIN_BL; //輸入影象資訊 memcpy((unsigned char*)pIplImg->imageData,pCImg->data(),pCImg->getImageSizeInBytes()); //將RGB儲存為BGR unsigned int順藤摸瓜,再重申下我的目的是Opencv的圖轉成OSG的,因為配置了Opencv2.0,所以使用了最新的影象格式Mat(同時包括了老版本的IplImage和cvMat)
於是任務變成:Opencv Mat->OSG::Image
去Image看建構函式,只有setImage中要求設定長款和char* data,資料格式相符。OSG原始碼:
/** Set the image dimensions, format and data. */
virtual void setImage(int s,int t,int r,
GLint internalTextureformat,
GLenum pixelFormat,GLenum type,
unsigned char* data,
AllocationMode mode,
int packing=1, int rowLength=0);
之後試了一下居然成了。我的程式碼:
osg::ref_ptr<osg::Image> mat2img::mat2image(Mat cvimg){ osgframe=new osg::Image; osgframe->setImage(cvimg.cols,cvimg.rows,3, GL_BGR,GL_BGR,GL_UNSIGNED_BYTE,cvimg.data, osg::Image::NO_DELETE,1); if(osgframe) printf("convert done!"); osgDB::writeImageFile(*osgframe,"D:\\OV2OV\\OV2OV\\osgframe.bmp"); return osgframe;}
除錯輸出的圖片和文字資訊全部正確。
之後就是重新加工視訊流了,用osg紋理貼圖即可。
相關推薦
osg與OpenCV影象互轉
因研究需要,這幾天想把Opecv獲取的視訊幀轉到OSG中作為紋理背景輸出,關鍵的一步就是Opencv幀影象的傳遞。 那麼問題來了:Opencv存放影象資料的格式和OSG的差異大嗎? 因為自己也是個新手,首先找到了 osg抓幀放到openCV裡 http://wenku.ba
影象RGB2YUV與YUV2RGB格式互轉介紹
1 YUV格式與RGB格式說明 由於不同國家的電視訊號系統支援的影象格式不同,有YUV格式成像,也有RGB格式成像,因此為了保證相容性,需要進行RGB與YUV格式的互轉。 另外YUV格式具有亮度資訊和色彩資訊分離的特點,但大多數影象處理操作都是基於RGB格式,需要將RGB格式轉
Java中net.sf.json包關於JSON與對象互轉的坑
一句話 declared bean == float 谷歌 數據類型 運行時 定制 在Web開發過程中離不開數據的交互,這就需要規定交互數據的相關格式,以便數據在客戶端與服務器之間進行傳遞。數據的格式通常有2種:1、xml;2、JSON。通常來說都是使用JSON來傳遞數
集合與數組互轉
代碼 ons ace 表示 但是 漢字 運用 修改 style 一.集合轉數組 以ArrayList集合為例,使用該集合的一個成員方法toArray(),可以將一個集合對象轉化為一個數組。如下所示: 1 void listToArray(){ 2
java 字符與ASCII碼互轉
方法 style println span har pos system pan blog 字符轉對應ASCII碼 // 方法一:將char強制轉換為byte char ch = ‘A‘; byte byteAscii = (byte) ch; System.out.
縱表與橫表互轉實例
sum 代碼 sql help blog 所有 .cn light div 1.縱表轉橫表: 縱表結構:Table1 轉換後的橫表結構: Sql示例代碼: ? 1 2 3 4 5 6 7 8 9 10 11 select username, sum
gensim與numpy array 互轉
字母轉 IT aid coo tool rdo ont array dense 目的 將gensim輸出的格式轉化為numpy array格式,支持作為scikit-learn,tensorflow的輸入 實施 使用nltk庫的停用詞和網上收集的資料整合成一份新的停用詞
SQL縱表與橫表互轉
padding else 結束 esc ase when sum -a order 1.縱表轉橫表: 縱表結構:Table1 轉換後的橫表結構: Sql示例代碼: select username, sum(case Course when ‘語文‘ t
JDK1.8 LocalDateTime 時間類與字符互轉
nth formatter ear class light 大小寫 orm ava 1.8 public static void main(String[] args) { DateTimeFormatter dateTimeFormatter=Date
javascript與php時/分/秒與秒數互轉
cond log pre UNC ole arr 時間 min seconds javascript: /* 時間轉換成秒 */ function time_to_second(time){ var arr = time.split(‘:‘) var hour = arr[
CAD小技巧-怎麽將DWG與DXF進行互轉?
ima dde 電腦 菜單欄 轉換 希望 拖拽 -o 朋友 CAD小技巧,怎麽將DWG與DXF進行互轉?在CAD行業中小夥伴們都知道,他們每天的日常工作就是編輯CAD圖紙文件,以前的CAD前輩們都是用手繪制的,但是隨著科技的發展,現在編輯CAD圖紙一般都是借助CAD編輯器來
IOS中的NSString與NSArray的互轉
將string字串轉換為array陣列 NSArray *array = [Str componentsSeparatedByString:@","];//分隔符逗號 將array陣列轉換為string字串 &n
js字元與ASCII碼互轉的方法
大寫字母A-Z對應的ASCII碼值是65-90 小寫字母a-z對應的ASCII碼值是97-122 將字母轉為ascii嘛的方法: var str = "A"; str.charCodeAt(); // 65 var str1 = 'a'; str1.charCodeAt()
xstream--xml工具類--java物件轉換JSONObject、xml與java物件互轉
工作環境: myeclipse2013、jdk1.8、fastjson1.1.41、xstream1.4.3 import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.Writer;
CAD小技巧-怎麼將DWG與DXF進行互轉?
CAD小技巧,怎麼將DWG與DXF進行互轉?在CAD行業中小夥伴們都知道,他們每天的日常工作就是編輯CAD圖紙檔案,以前的CAD前輩們都是用手繪製的,但是隨著科技的發展,現在編輯CAD圖紙一般都是藉助CAD編輯器來進行繪製,既方便又快捷,但是編輯出來的CAD圖紙都是dwg格式的,這樣不利用我們進行檢視,那怎麼
java 可變引數,集合與陣列的互轉,靜態匯入
可變引數 可變引數是如果型別確定,引數個數不確定,需要用可變引數來定義,引數的具體個數在方法呼叫時才能確定java把可變引數當做陣列處理 可變引數的定義是jdk1.5加入的,比如main方法 public static void main(String [] args) 特點:
IOS編碼GB2312與UTF-8互轉
GB2312轉換為UTF-8的方法 + (NSData *)UTF8WithGB2312Data:(NSData *)gb2312Data { NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding
C#中DataTable與List的互轉
1、建立DataTable擴充套件方法類(DataTableExtend.cs) using System; using System.Collections.Generic; using System.Data; using System.Reflection; namespace My
時間戳與時間字串互轉的工具類
這是專案經常用到的時間戳與時間字串互轉的工具類,記錄於此。 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public final class
檔案與base64 字串互轉
這是專案中用到的檔案與base64字串互轉的工具,記錄於此。 import android.util.Base64; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre