实验1

#include<opencv2/core.hpp>
#include<opencv2/highgui.hpp>
using namespace cv;

void getChannel(const uchar *input, int width, int height,int inStep, int inChannels,uchar *output, int outStep, int channelToGet){
    for (int y = 0; y < height; ++y, input += inStep, output += outStep){
        const uchar *px = input;
        for (int x = 0; x < width; ++x, px += inChannels)
            output[x] = px[channelToGet];
    }
}
void getChannel(const Mat &in, Mat &output, int channelToGet)
{
    getChannel(in.data, in.cols, in.rows, in.step, in.channels(), output.data, output.step, channelToGet);
}

int main()
{
    Mat img = imread("f:/2008_000149.jpg", -1);

    Mat channel(img.size(), CV_8UC1);
    getChannel(img.data, img.cols, img.rows, img.step, img.channels(), channel.data, channel.step, 0);
    channel = 0;

    Rect roi(10, 10, 300, 300);
    getChannel(img.ptr(roi.y, roi.x), roi.width, roi.height, img.step, img.channels(),
    channel.ptr(roi.y, roi.x), channel.step, 0);
    getChannel(img(roi), channel(roi), 0);

    imshow("img", img);
    imshow("channel", channel);
    waitKey();
    return 0;
}
原文地址:https://www.cnblogs.com/war1111/p/13709456.html