Capture RGB Frame Directly using Open CV APIs

yes you can do it~~~ I build source it in ver 3.4.16

apt install libv4l-dev

-DWITH_LIBV4L=ON -DWITH_GSTREAMER=OFF

cmake .. -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/opt/opencv -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS_RELEASE="-O3 -g" -DCMAKE_CXX_FLAGS_RELEASE="-O3 -g" -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_JPEG=ON -DBUILD_PNG=ON -DBUILD_ZLIB=ON -DWITH_LIBV4L=ON -DBUILD_opencv_python3=ON -DBUILD_EXAMPLES=ON -DWITH_GSTREAMER=OFF -DWITH_CUDA=OFF
cmake --build . --config Release --target install -- -j$CPU_NUM VERBOSE=1

////////because
~~~in cap_gstreamer.cpp 
case CV_CAP_PROP_CONVERT_RGB:
        break;

~~~in cap_libv4l.cpp
case CV_CAP_PROP_MODE:
        int mode;
        mode = cvRound(value);
        if (capture->mode != mode) {
            switch (mode) {
            case CV_CAP_MODE_BGR:
            case CV_CAP_MODE_RGB:
            case CV_CAP_MODE_GRAY:
            case CV_CAP_MODE_YUYV:
                capture->mode = mode;

case CV_CAP_MODE_RGB:
    requestedPixelFormat = V4L2_PIX_FMT_RGB24;
    break;

~~~~in your cpp
cv::VideoCapture cap(0);
    cap.set(CV_CAP_PROP_FRAME_WIDTH,    800);
    cap.set(CV_CAP_PROP_FRAME_HEIGHT,   600);
    cap.set(CV_CAP_PROP_MODE,           CV_CAP_MODE_RGB);