【opencv】14.cv::cvtColor函数转换颜色空间时使用CV_RGB2BGR与CV_BGR2RGB结果一样的原因

看下面一段代码:

cv::Mat img1 = imread("./lena_bgr.png",1);
cv::Mat img2,img3;
cv::cvtColor(img1, img2, CV_RGB2BGR);
cv::cvtColor(img1, img3, CV_BGR2RGB); 

cv::imshow("img1", img1);
cv::imshow("img2", img2);
cv::imshow("img3", img3);
cv::waitKey(0);

可以看出,img2img3的图片是一模一样的。因为CV_RGB2BGRCV_BGR2RGB的值都为4,表示交换BR通道的值。定义在/usr/local/include/opencv2/imgproc/types_c.h中,可以看到以下枚举定义:

CV_BGR2RGB     =4,
CV_RGB2BGR     =CV_BGR2RGB,

底层算法确实是一样的,RGBBGR互相转化也就是把RB数据互换位置:

  • 当你输入是RGB格式时,转化后就变成BGR格式;
  • 当你输入是BGR格式时,转化后就变成RGB格式;
  • 当你对一个图像使用cv::cvtColor()进行连续两次in-placeCV_RGB2BGR操作,就变回原来的颜色空间了。

上面的CV_RGB2BGRCV_BGR2RGB是opencv2.x版本的;
opencv3.0版本的是 cv::COLOR_RGB2BGRcv::COLOR_BGR2RGB
他们定义在/usr/local/include/opencv2/imgproc.hpp中的命名空间为cv里面:

COLOR_BGR2RGB      = 4,
COLOR_RGB2BGR      = COLOR_BGR2RGB,

类似的还有:

enum{
    CV_BGR2BGRA    =0,
    CV_RGB2RGBA    =CV_BGR2BGRA,

    CV_BGRA2BGR    =1,
    CV_RGBA2RGB    =CV_BGRA2BGR,

    CV_BGR2RGBA    =2,
    CV_RGB2BGRA    =CV_BGR2RGBA,

    CV_RGBA2BGR    =3,
    CV_BGRA2RGB    =CV_RGBA2BGR,

    CV_BGR2RGB     =4,
    CV_RGB2BGR     =CV_BGR2RGB,

    CV_BGRA2RGBA   =5,
    CV_RGBA2BGRA   =CV_BGRA2RGBA,

    CV_BGR2GRAY    =6,
    CV_RGB2GRAY    =7,
    CV_GRAY2BGR    =8,
    CV_GRAY2RGB    =CV_GRAY2BGR,
    CV_GRAY2BGRA   =9,
    CV_GRAY2RGBA   =CV_GRAY2BGRA,
    CV_BGRA2GRAY   =10,
    CV_RGBA2GRAY   =11,
    ...
    ...
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值