https://zhidao.baidu.com/question/871930033390395932.html
//=====================================指针法==================================================//
#include<opencv2/opencv.hpp>
#include<iostream>
using
namespace
std;
using
namespace
cv;
int
main()
{
Mat img=imread(
"f:/1.jpg"
);
int
height=img.rows;
int
width=img.cols;
for
(
int
i=0;i<height;i++)
{
unsigned
char
*data=img.data+i*width*img.channels();
for
(
int
j=0;j<width;j++)
{
int
r=*(data+j*img.channels());
int
g=*(data+j*img.channels()+1);
int
b=*(data+j*img.channels()+2);
cout<<r<<
" "
<<g<<
" "
<<b<<endl;
}
}
img.release();
system
(
"pause"
);
return
1;
}
//============================================================================================//
推荐使用C++格式,比较方便使用
#include "WangSetup.h"
#include <iostream>
#include <cv.h>
#include <highgui.h>
using
namespace
std;
int
main()
{
//C++ Format
cv::Mat img = cv::imread(
"lena.jpg"
);
//取img中(30, 20)这个像素点的bgr信息
cv::Vec3b bgr = img.at<cv::Vec3b>(30, 20);
cout <<
"B: "
<< (unsigned
int
)bgr.val[0] <<
", "
;
cout <<
"G: "
<< (unsigned
int
)bgr.val[1] <<
", "
;
cout <<
"R: "
<< (unsigned
int
)bgr.val[2] << endl;
//C Format
IplImage *img2 = cvLoadImage(
"lena.jpg"
);
//8UC3, (0,0)B, (0,0)G, (0,0)R, (0,1)B, ...
char
*ptr = img2->imageData
//图像首地址
+ img2->widthStep * 30
//每行大小 * 行数
+ 3 * 20;
//BGR占3个大小空间 * 列数
printf
(
"B: %d, G: %d, R: %d\n"
, (uchar)ptr[0], (uchar)ptr[1], (uchar)ptr[2]);
cvReleaseImage(&img2);
return
0;
}