[opencv]有關矩陣以及iplimage

來源:互聯網
上載者:User
文章目錄
  • 訪問雙通道的Mat類型的方法
訪問雙通道的Mat類型的方法
float data[18] = {30,60,40,60,50,40,67,88,55,33,22,97,59,69,32,46,25,45,};CvMat mat;cvInitMatHeader(&mat,3,3,CV_32FC2,data);//double have3*3 elementsint nChannels = 2;for(y = 0;y<mat.rows;y++){float *da = (float*)(mat.data.ptr + y*mat.step);//指標指向某一行的第一個元素for(x = 0;x<mat.cols;x++){float value[2];value[0] = *(da+x*nChannels);//由於每個元素包括nChannels個值 這裡需要加幾個可以找到第某個通道的值value[1] = *(da+x*nChannels+1);printf("(%f  %f)",value[0],value[1]);}printf("\n");}

float *da = (float*)(mat.data.ptr + y*mat.step);//指標指向某一行的第一個元素

這句話如注釋所說,先找到某一行,mat.data.ptr這個是矩陣最頭的元素,他的類型是unsignedchar型指標,mat.step是兩行mat之間的距離,加一個這個就可以跳一行的。但要注意的是,mat.data.ptr是一個位元組的無符號整型數,每加1就會移動一個位元組數。

如果變成(float*)(mat.data.ptr) + y*mat.step;就不對了,先變成了float型的指標,再加一個數字就移動了一個float大小的4位元組,移多了……

value[0] = *(da+x*nChannels)這句話,da已經移到某一行的頭,然後移到第x個元素需要加x*nChannels,因為每個元素有nChannels個表示通道的值。進而再加幾,就是這個元素的第幾個通道的值。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.