[英]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.