1.Mat对象的类型转化
//原本读入的是 UINT8类型的数据
cv::Mat imOriginal = cv::imread("005_L_2_3.bmp", 0);
//把imPadded转为32为float并赋值给新的Mat a
//这好像涉及到了容器(containers), 暂时不是很清楚
cv::Mat a = cv::Mat_<float>(imPadded);
2 取出Scalar类的元素
Scalar类用于初始化Mat类中的像素值, 这类用法用的不少, 但是当想去除Scalar类对象的一个值时, 却纠结了一下.
用最后用.val[ ]解决
Scalar类.val[ind]
,
cv::Scalar nPoints;
nPoints = cv::sum(patchSet[i]);//求和函数,返回的是一个Scalar类
//取出nPoints 中第一个数值
cout << nPoints.val[0]<< endl;
3 对原图像进行类型转化, 并不影响ROI的数据类型
//对图像进行sobel滤波, 得到imGradient是 CV_32FC1类型
cv::Sobel(im, imGradient, CV_32FC1, 0, 1);
imGradient = abs(imGradient);//
//将imGradient 分为上下两块, i.e.设置两个感兴趣区域(ROI),
//其实是得到两个信息头,分别指向imGradient 的上半部分和下半部分
cv::Size imSize = imGradient.size();
Mat upperGrad = imGradient(cv::Range(0, imSize.height / 2), cv::Range::all());
Mat lowerGrad = imGradient(cv::Range(imSize.height / 2, imSize.height), cv::Range::all());
//将imGradient转化为 CV_8UC1类型
imGradient.convertTo(imGradient, CV_8UC1);
/*
★此时 imGradient 为CV_8UC1类型, 但是upperGrad 和lowerGrad 依然为CV_32FC1类型
*/