[問題] openCV中的IplImage結構

看板C_and_CPP (C/C++)作者 (笨小孩)時間15年前 (2010/11/03 18:43), 編輯推噓7(7010)
留言17則, 7人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 我想將AVI檔用cvCaptureFromAVI() 讀入,再將數值存入2維陣列後輸出 當frame寬度為4的倍數時,顯示皆正常,如果不是則歪斜,我知道它會 做補齊的動作,我的frame->align=4 frame->width=318 但我的 frame->widthstep 居然是954... 它的row不是會補齊為4的倍數嗎? 如果不會那為何我的圖片會歪斜? 希望得到的正確結果: 正常得播放圖片 程式跑出來的錯誤結果: 圖片有歪斜 開發平台: (例: VC2008, Windows) 有問題的code: (請善用置底文標色功能) for(int i=0;i<H;i++) //copy frame to matrix { for(int j=0;j<W;j++) { imgbuf->r2[H-i-1][j]=(unsigned char)frame->imageData[i*frame->widthStep +j*3]; //B imgbuf->r1[H-i-1][j]=(unsigned char)frame->imageData[i*frame->widthStep +j*3+1]; //G imgbuf->r0[H-i-1][j]=(unsigned char)frame->imageData[i*frame->widthStep +j*3+2]; //R } } for(int i=0;i<H;i++) // write value of matrix to frame { for(int j=0;j<W;j++) { frame->imageData[i*frame->widthStep+j*3]=(char)imgout->r2[H-i-1][j]; //B frame->imageData[i*frame->widthStep+j*3+1]=(char)imgout->r1[H-i-1][j]; //G frame->imageData[i*frame->widthStep+j*3+2]=(char)imgout->r0[H-i-1][j]; //R } } 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.13.132.136 ※ 編輯: hardman1110 來自: 163.13.132.136 (11/03 18:47)

11/03 19:07, , 1F
第二段 frame->imageDataOrigin[...]
11/03 19:07, 1F

11/03 19:27, , 2F
請問是將imageData改成imageDataOrigin嗎? 改了但一樣
11/03 19:27, 2F

11/03 20:21, , 3F
有試過其他avi file嗎? 印象中opencv的讀影片有些開不了
11/03 20:21, 3F

11/03 20:52, , 4F
會歪斜就是你傳輸值的過程沒有對齊 所以你有用到的地方都要
11/03 20:52, 4F

11/03 20:52, , 5F
11/03 20:52, 5F

11/03 22:18, , 6F
必須是4的倍數
11/03 22:18, 6F

11/03 23:58, , 7F
都改成imageDataOrigin了,但還是不ok,是方法錯誤?
11/03 23:58, 7F

11/04 00:24, , 8F
widthstep不一定是四的倍數,因為有可會有alignment
11/04 00:24, 8F

11/04 01:10, , 9F
access pixel 可以看一下 OpenCV Wiki faq 的這一段
11/04 01:10, 9F

11/04 01:10, , 10F
11/04 01:10, 10F

11/04 10:55, , 11F
holydc你好,你提供的網址我看過了,他並沒有處理寬
11/04 10:55, 11F

11/04 10:56, , 12F
不為4倍數的動作,且他的程式跑出來一樣有錯
11/04 10:56, 12F

11/07 00:53, , 13F
歪斜是畫出來會變型嗎??
11/07 00:53, 13F

11/09 08:59, , 14F
就畫面無法對齊,應該是記憶體沒對齊造成的`,
11/09 08:59, 14F

11/09 09:00, , 15F
我就算畫面抓下來直接輸出不處理也會歪掉
11/09 09:00, 15F

11/09 22:54, , 16F
imageDataOrigin 是給 cvFree_ 釋放空間用 改成它應該沒用
11/09 22:54, 16F

11/09 22:56, , 17F
但為何 widthstep 不為四的倍數 我也不清楚 滿想知道原因的
11/09 22:56, 17F
文章代碼(AID): #1CqJphan (C_and_CPP)
文章代碼(AID): #1CqJphan (C_and_CPP)