opencv圖片上如何顯示兩個小圖片
這個問題產生於第四章習題1.b我琢磨了大半天,但是最終明白了。
首先解釋一下cvCreateImage()與cvCreateImageHeader()兩個函式的區別
這兩個函式引數都是一樣的,這兩個函式的區別是cvCreateImage 除了分配影象頭之外,還分配影象資料,而cvCreateImageHeader僅僅是分配影象頭,並沒有分配影象資料。之所以被稱為圖片頭,我想是因為沒有屬於自己的記憶體空間資料,但是imagedata可以指向其他的影象資料區,或者呼叫void
cvSetData( CvArr* arr, void* data, int step )。詳細區別,百度一下...........
進入正題:
IplImage *unit =cvCreateImage(cvSize(frame->width * 2,frame->height),frame->depth,3);
IplImage *m_1 = cvCreateImageHeader(cvSize(frame->width ,frame->height),frame->depth,3);
建立了一個寬度是兩倍幀寬的影象,並分配記憶體。 建立了一個幀寬的影象頭,沒有自己的資料區。
m_1->widthStep = unit->widthStep; //重要啦。。。。
m_1->imageData = unit->imageData;
cvCopy(frame,m_1);
m_1->imageData = unit->imageData+frame->widthStep;
cvCopy(frame,m_1);
這樣就可以在一個圖片上,顯示兩個相同的影象。
問題來了,為什麼是m_1->widthStep = unit->widthStep 而不是m_1->widthStep
= frame->widthStep
這是記憶體上資料排列順序的問題。我們可以這樣理解首先讓影象頭指到大影象的資料開始處,先拷貝一行畫素的資料,然後第二行資料肯定要拷貝到當前的正下方,而不能順著繼續存放。那麼就要有跳躍的存放,跳躍的寬度就一個frame->widthStep。但是我們一定要告知m_1的屬性widthStep。一般情況下widthStep == width *nChannels,但是這是普通的情況,有時一行畫素後會有垃圾區域,這就導致widthStep != width
*nChannels。這時我們就屬於後一種情況,我們不能把有效資料存放到垃圾區域,就要有一個標誌widthStep,標示影象寬度真正大小。當存放了width *nChannels,就要跳躍(widthStep-width *nChannels)多個記憶體區,接著存放下一行畫素資料。這裡如果
m_1->widthStep = frame->widthStep 相當於(frame->widthStep-frame->width
*nChannels) == 0,跳躍寬度為0,這肯定不對。所以m_1->widthStep =frame->widthStep
*2 ,也即m_1->widthStep = unit->widthStep 才對。
相關文章
- 小程式button背景顯示圖片
- img圖片無法顯示利用onerror事件顯示替代圖片Error事件
- CoordinatorLayout、AppBarLayout實現上滑隱藏圖片,下滑顯示圖片APP
- opencv圖片操作OpenCV
- Java——圖片滾動顯示Java
- psd圖片不能在網頁上顯示網頁
- django 實現圖片上傳和顯示操作Django
- Android 開源圖片裁剪工具、圖片顯示工具分享Android
- 網頁圖片不能顯示 網頁圖片顯示不出來的解決辦法網頁
- ImageView顯示圖片資源的兩種方法(background/src)View
- React-Quill中的圖片上傳及顯示ReactUI
- vxe-upload 上傳圖片顯示進度
- JS控制圖片顯示的大小(圖片等比例縮放)JS
- CSS圖片的灰色顯示效果CSS
- ImageView顯示網路上的圖片View
- vue el-image 顯示圖片Vue
- 微信小程式 圖片上傳微信小程式
- win7圖片只顯示圖示不顯示預覽圖解決方案Win7圖解
- 上傳封面圖片前臺不顯示 Picture檔案裡可以看到上傳的圖片
- jquery 滑鼠移到圖片彈出浮動層顯示大圖片例子jQuery
- springmvc中圖片回顯返回位元組流陣列顯示圖片完整案例SpringMVC陣列
- iOS開發 如何在Label中顯示圖片-圖文混排iOS
- 用Qt5和OpenCV讀取顯示中文路徑的圖片QTOpenCV
- Django實現圖片上傳並前端頁面顯示Django前端
- Android用ImageView顯示本地和網上的圖片AndroidView
- iOS Swift 仿微信聊天圖片顯示iOSSwift
- 動態顯示資料庫圖片資料庫
- cv2.imshow顯示圖片不全
- 圖片上傳及圖片處理
- 圖片設定level-list,根據不同狀態顯示不同圖片
- Overleaf中插入pdf圖片只顯示圖片路徑的解決方式
- iOS設定tabbar不顯示文字,只顯示圖片iOStabBar
- Torch7平臺上顯示圖片的幾種方法
- php圖片上傳之圖片轉換PHP
- OpenCv--圖片處理操作OpenCV
- VS+Qt+Halcon——顯示圖片,實現滑鼠縮放、移動圖片QT
- chrome瀏覽器不能顯示本地圖片辦法解決(圖片預覽)Chrome瀏覽器地圖
- java匯出圖片,拼接多個圖片, 拼接文字和圖片 到一個圖片檔案Java