【OpenCV 2.4.9 用户指南之一】图像读写、显示、基本操作

来源:互联网 发布:知乐百度网盘 编辑:程序博客网 时间:2024/04/30 22:41

读图像

Mat  img = imread ( filename );  默认3通道

Mat  img = imread(filename,0); 加载灰度图


写图像

imwrite(filename, img);


读取灰度图像元值

Scalar intensity = img.at<uchar>(y, x); 矩阵形式,先行后列

或Scalar intensity = img.at<uchar>(Point(x,y)); 坐标形式


读取3波段图像像元值

Vec3b intensity =img.at<Vec3b>(y, x);

uchar blue = intensity.val[0];

uchar green= intensity.val[1];

uchar red = intensity.val[2];

<span style="font-family:Arial;">Vec3b intensity =img.at<Vec3b>(y, x);uchar blue = intensity.val[0];uchar green= intensity.val[1];uchar red = intensity.val[2];</span>


读取浮点型3波段图像像元值

Vec3f intensity = img.at<Vec3f>(y, x);

float blue = intensity.val[0];

float green = intensity.val[1];

float red = intensity.val[2];


改变像元值

img.at<uchar>(y, x) = 128;


calib3b模块中有函数,读写2维或3维点形成Mat格式矩阵。此矩阵为1列,每行代表1个点。

vector<point2f> points;

Mat pointsMat = Mat(points);

读取值

Point2f point = pointsMat.at<Point2f>(i, 0);


基本操作

从已有灰度图像中创建全黑图像

img = Scalar(0); 

选择感兴趣区

Rect r(10,10,100,100);

Mat smallImg= img(r);

从Mat转为C接口数据结构

Mat img = imread("image.jpg");

IplImage img1 = img;

CvMat m = img;

注意:此处并无数据拷贝,只是拷贝了文件头,指向同一数据

从彩色图转为灰度图

Mat img = imread("image.jpg");

Mat grey;

cvtColor(img, grey, CVBGR2GRAY);

改变图像数据类型

src.convertTo(dst, CV_32F);


图形可视化

显示8U图像

Mat img = imread("img.jpg");

namedWindow ("image",CV_WINDOW_AUTOSIZE);

imshow("image",img);

waitKey();


32F图像转为8U图像

Mat img = imread("image.jpg");

Mat grey;

cvtColor(img,grey, CV_BGR2GRAY);


Mat sobelx;

Sobel(grey, sobelx,CV_32F,1,0);


double minVal,maxVal;

minMaxLoc(sobelx, &minVal, &maxVal); //找最小值和最大值

Mat draw;

sobelx.convertTo(draw,CV_8U, 255.0/(maxVal - minVal), -minVal * 255.0/(maxVal - minVal));


namedWindow("image",CV_WINDOW_AUTOSIZE);

imshow("image",draw);

waitKey();

0 0
原创粉丝点击