簡體   English   中英

如何在openCV中獲得像素矩陣和重塑矩陣

[英]How to get a matrix of pixels and reshape matrix in openCV

我正在使用openCV在C ++中實現一個圖像處理算法,其中第一步要求將圖像轉換為矩陣。 我知道當圖像加載到openCV中時,它已經存儲為矩陣。 我使用的圖像大小為80 x 60,所以我假設它存儲的矩陣大小為80 x 60.但是,我想首先能夠看到這個矩陣然后能夠重塑它變成了一個相同的矩陣。 像素,但作為一個長列。 即80×60矩陣現在將成為4800×1矩陣。 我曾嘗試過研究教科書和在線但無濟於事。 到目前為止這是我的代碼。 在任何情況下,它都無法正常工作,因為我無法將'IplImage *'轉換為'CvMat *但是我應該如何在創建后將像素值分配給矩陣? 如果有人可以幫我這個代碼,我將不勝感激。

#include "cv.h"
#include "highgui.h"
#include "iostream"

using namespace std;
int main( int argc, char* argv ) {
IplImage* img0 = NULL;
CvMat* img0_mat = NULL ;
img0 = cvLoadImage("C:\\new\\walk mii.jpg");
if (!img0){
    return -1;}
img0_mat = cvCreateMat(80, 60, 1);
img0_mat = img0;
cout <<" matrix " << img0 << endl;

cvWaitKey(0);
return 0;
}

你可以調用Mat::reshape(int cn, int rows=0)

該方法為* this元素創建一個新的矩陣頭。 新矩陣可以具有不同的大小和/或不同數量的通道。 任何組合都是可能的,只要:

1)新矩陣中不包含額外元素,不排除任何元素。 因此,產品

2)rows * cols * channels()必須在轉換后保持不變。

沒有數據被復制,即這是O(1)操作。 因此,如果更改行數,或者操作以其他方式更改元素的行索引,則矩陣必須是連續的。 見Mat :: isContinuous()。

...看起來你正在使用舊版本的庫,所以你想要cvReshape 這樣的事情應該有效:

#include "cv.h" 
#include "highgui.h" 
#include "iostream" 
using namespace std; 

int main( int argc, char* argv ) 
{ 
    IplImage* img0 = NULL; 
    CvMat* img0_mat = NULL ; 
    img0 = cvLoadImage("C:\\new\\walk mii.jpg"); 
    img0_mat = cvCreateMat(80, 60, 1); 

    CvMat row_header, *row;
    row = cvReshape( img0_mat, &row_header, 0, 1 );

    cout << " matrix " << row->tostring() << endl; 

    cvWaitKey(0); 
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM