opencv 3 私人coedbook

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类型
    */

猜你喜欢

转载自blog.csdn.net/qq_29007291/article/details/79884540