opencv Mat 访问

 scan-c

    cv::Mat src = cv::imread(filePaths[0], cv::IMREAD_COLOR);

    cv::Mat gray;
    cv::cvtColor(src, gray, cv::COLOR_RGB2GRAY);

    //scan-c
    cv::Mat gray0(gray.clone());
    int nRows = gray0.rows;
    int nCols = gray0.cols * gray0.channels();

    if (gray0.isContinuous())
    {
        nCols = nCols * nRows;
        nRows = 1;
    }

    for (int row = 0; row < nRows; ++row)
    {
        uchar* p = gray0.ptr<uchar>(row);
        for (int col = 0; col < nCols; ++col)
        {
            p[col] = col % 255;
        }
    }

 scan-iterator

    //scan-iterator
    cv::Mat gray1(gray.clone());
    cv::MatIterator_<uchar> begin = gray1.begin<uchar>();
    cv::MatIterator_<uchar> end = gray1.end<uchar>();
    int k = 0;
    for (; begin != end; ++begin, ++k)
    {
        *begin = k % 255;
    }

    k = 0;
    cv::Mat src1 = src.clone();
    cv::MatIterator_<cv::Vec3b> begin3 = src1.begin<cv::Vec3b>();
    cv::MatIterator_<cv::Vec3b> end3 = src1.end<cv::Vec3b>();
    for (; begin3 != end3; ++begin3, ++k)
    {
        (*begin3)[0] = k % 255;
        (*begin3)[1] = k % 255;
        (*begin3)[2] = k % 255;
    }
    

 scan Vec3b

    //scan at
    k = 0;
    cv::Mat gray2 = gray.clone();
    for (int j = 0; j < gray2.rows; ++j)
    {
        for (int i = 0; i < gray2.cols; ++i)
        {
            gray2.at<uchar>(j, i) = k % 255;
            ++k;
        }
    }

    k = 0;
    cv::Mat src2 = src.clone();
    cv::Mat_<cv::Vec3b> _src2 = src2;
    for (int j = 0; j < src2.rows; ++j)
    {   
        for (int i = 0; i < src2.cols; ++i)
        {
            _src2(j, i).val[0] = k % 255;
            _src2(j, i)[1] = k % 255;
            _src2(j, i).val[2] = k % 255;

            ++k;
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_30460949/article/details/128012589
今日推荐