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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Opencv中IplImage的四字节对齐问题

發布時間:2023/12/2 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Opencv中IplImage的四字节对齐问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、結構解釋

? ? ? ? IplImage數據結構體中有兩個寬度:

? ? ? ?1 是width屬性,表示圖像的每行像素數;

? ? ? ?2 是widthStep屬性,表示存儲一行像素需要的字節數。

? ? 在OpenCV里邊,widthStep必須是4的倍數,從而實現字節對齊,有利于提高運算速度。所以widthStep不等于width*nChannels。

? ? ?三通道字節圖像中,imageData排列如下,其中BGR分別為每個像素的三個通道值。


? ?舉例:如果單通道圖像寬度為3,由于不是4的整數倍,所以加一個字節補齊,則widthStep是4。即這個圖像的一行需要4個字節,只使用前3個,最后一個空著。也就是一個寬3高3的圖像的imageData數據大小為4*3=12字節。

? ?注意,在不知道imageData是四字節對齊的情況下直接讀取,會造成錯位。空著的那個像素并不是無效的,它仍然可以被操作。

二、去掉補齊位,正常讀取

unsigned char* colors1 = (unsigned char*)input->imageData;unsigned char* colors2 = (unsigned char*)test->imageData;//字節對齊int widths = input->width; //每行像素個數int heights = input->height; int widthSteps = input->widthStep; //存儲一行像素需要的字節數int cn = input->nChannels;unsigned char* color1 = (unsigned char*)malloc(3* widths * heights *sizeof(unsigned char));unsigned char* color2 = (unsigned char*)malloc(3* widths * heights *sizeof(unsigned char));for (int i = 0; i < heights; i++)for (int j = 0; j < widths; j++){for (int k = 0; k < cn; k++){color1[i*widths*cn + cn*j + k] = colors1[i*widthSteps + j*cn + k];color2[i*widths*cn + cn*j + k] = colors2[i*widthSteps + j*cn + k];}}

? ? ?理解:

? ? ?i*widthSteps + j*cn + k中,i*widthSteps計算前幾行的字節數,j*cn計算當前行已經占有的字節數,再加上1 2 3.

? ? ?i*widths*cn + cn*j + k中,?i*widths*cn是計算前幾行占有的字節數,j*cn計算當前行已經占有的字節數,再加上1 2 3.

? ??

總結

以上是生活随笔為你收集整理的Opencv中IplImage的四字节对齐问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。