mat元素訪問方法如下
//declare
template
_tp& cv:
:mat::at
(int i0 =
0)
cv:
:mat h
(100
,100
, cv_64f)
;//初始化
for(
int i =
0; i < h.rows; i++
)for
(int j =
0; j < h.cols; j++
) h.at<
double
>
(i,j)=1.
/(i+j+1)
;//賦值
優點:直觀好理解
缺點:訪問速度相對慢
**如下
cv:
:mat src
(100
,100
, cv_64f)
;//初始化
int width = src.cols;
int height = src.rows;
int step = src.step;
const
float
* sptr =
(float
*)src.data;
step /
=sizeof
(*sptr)
;for
(int i =
0; i < height; i++)}
enum imreadmodes
;
/*
//use g++ to build
g++ read_mat.cpp -o read -std=c++11 -lopencv_core -lopencv_imgproc -lopencv_highgui
*/#include
#include
#include
#ifdef _win32
#include
/* _access */
#include
/* _mkdir */
#else
#include
/* access */
#include
/*mkdir*/
#endif
#include
using namespace cv;
using namespace std;
#define isshowat 1
intmain
(int argc,
char
* ar**)
int width = image.cols;
//寬int height = image.rows;
//高//如果定義了巨集等於1,則使用at訪問,否則使用位址指標訪問
#if isshowat
vec3b tmp;
cv::mat new_image = cv:
:mat:
:zeros
(image.
size()
, image.
type()
);for(
int r =
0; r < height; r++)}
cv::imshow
("new_image"
, new_image)
; cv:
:waitkey(0
);#else
int step = image.step;
//每一行包含的位元組數
//cout << image.type() << endl; //cv_8uc3
//cout << "image.step "<< image.step << endl; //
//定義指向矩陣資料的記憶體位址的指標,首先得知道資料元素的型別,
//正常的rgb的影象型別為cv_8uc3,灰度圖為cv_8uc1
const uchar* imgptr =
(uchar*
)image.data;
cout <<
sizeof
(*imgptr)
<< endl;
//輸出單一通道的位元組數=1,預設與image.elemsize1()相等
step /
=sizeof
(*imgptr)
;//每一行總的通道單元數
// 每個元素大小,單位是位元組 例type是cv_16sc3,那麼elemsize = 3 * 16 / 8 = 6 bytes
cout <<
"elemsize:"
<< image.
elemsize()
<< endl;
// 8*3/8=3
// 每個通道大小,單位是位元組
cout <<
"elemsize1:"
<< image.
elemsize1()
<< endl;
//1//建立檔案物件,儲存的值
errno_t err;
file *fp;if(
(err =
fopen_s
(&fp,
"result.txt"
,"w"))
!=0)printf
("the file 'result.txt' was not opened\n");
else
printf
("the file 'result.txt' was opened\n");
//file *fp = fopen("result.txt", "w");
//if (fp == null)
cv::mat same = cv:
:mat:
:zeros
(image.
size()
,cv_8uc3)
;for
(int i =
0; i < height; i++
)fprintf
(fp,
"\n");
}fclose
(fp);
cv::imwrite
("same.png"
, same)
;#endif
getchar()
;return0;
}
OpenCV 學習筆記(一)Mat
opencv是由c語言實現的,實際上它使用的結構體也是遵循物件導向思想設計的,iplimage由cvmat派生 資訊 和乙個指向儲存所有畫素值的矩陣 根據所選儲存方法的不同矩陣可以是不同的維數 的指標。mat矩陣頭 包括 typedef struct cvmat data ifdef cpluspl...
OpenCV中Mat 型別學習筆記
printf img.size 函式返回值 n cout 報錯 原因,mat.step1 0 需要用圓括弧 mat的step,size,step1,elemsize,elemsize1這幾個屬性非常容易混淆。opencv的官方參考手冊也沒有解釋清楚這幾個概念。step1 i 每一維元素的通道數 st...
OpenCV學習筆記七 關於Mat類
1 建立乙個mat物件僅僅是建立了資訊頭部分,並沒有複製影象矩陣,而是通過矩陣指標指向某一位址而實現。eg mat a,c 僅建立資訊頭部分 mat b a 使用拷貝建構函式 c a 賦值運算子 以上建立的所有mat物件最終都指向同乙個也是唯一的乙個資料矩陣。雖然資訊頭不同,但是通過任何乙個物件所做...