一、C++版本OpenCV的四种灰度化方式

C++版本OpenCV的四种灰度化方式

    void CVGray(const String srcImage,Mat &dstImage);//用OpenCV自带的方法实现灰度处理其实非常简单,只要在读取图片时,读取模式设置为0就可以了。
    
    void CVColorGray(const String srcImage,Mat &dstImage);//我们使用cvtColor()函数也可以达到相同的效果,代码如下:
    
    void CVCustomizeGray(const String srcImage,Mat &dstImage);//当然,我们也可以自己写代码去完成灰度的处理:
    //使用 GRAY = (R + G + B)/3 完成灰度处理
    
    void CVWeightGray(const String srcImage,Mat &dstImage,vector<float> weights);//不同权重的灰度化

void CVGray(const String srcImage,Mat &dstImage){
    dstImage=cv::imread(srcImage,0);// # 0代表灰色,1代表彩色
}

void CVColorGray(const String srcImage,Mat &dstImage){
    Mat Image=cv::imread(srcImage,1);// # 0代表灰色,1代表彩色
    cv::cvtColor(Image,dstImage,COLOR_BGR2GRAY);//颜色空间转换
}

void CVCustomizeGray(const String srcImage,Mat &dstImage){
    Mat Image=cv::imread(srcImage,1);// # 0代表灰色,1代表彩色
//    int height =Image.rows;
//    int width =Image.cols;
    dstImage =Mat::zeros(Image.size(),CV_8UC1);

    for(int row = 0; row < Image.rows; row++)
    {
        for(int col = 0; col < Image.cols; col++)
        {
            if(Image.channels() == 3)
            {

                int b = Image.at<Vec3b>(row, col)[0];
                int g = Image.at<Vec3b>(row, col)[1];
                int r = Image.at<Vec3b>(row, col)[2];
                // saturate_cast<uchar>主要是为了防止颜色溢出操作
                dstImage.at<uchar>(row, col)= saturate_cast<uchar>((b + g +r )/3);

             }

    }
    }
}


void CVWeightGray(const String srcImage,Mat &dstImage,std::vector<float> weights){
    Mat Image=cv::imread(srcImage,1);// # 0代表灰色,1代表彩色
    float Wb,Wg,Wr;
    if(weights.size()==3){
        Wb=weights[0];
        Wg=weights[1];
        Wr=weights[2];
    }else {
        Wb=1;
        Wg=1;
        Wr=1;
    }


//    int height =Image.rows;
//    int width =Image.cols;

    dstImage =Mat::zeros(Image.size(),CV_8UC1);
    for(int row = 0; row < Image.rows; row++)
    {
        for(int col = 0; col < Image.cols; col++)
        {
            if(Image.channels() == 3)
            {

                int b = Image.at<Vec3b>(row, col)[0];
                int g = Image.at<Vec3b>(row, col)[1];
                int r = Image.at<Vec3b>(row, col)[2];
                // saturate_cast<uchar>主要是为了防止颜色溢出操作
                dstImage.at<uchar>(row, col)= saturate_cast<uchar>((b + g +r )/3);
             }
        }
    }
}
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值