opencv获取彩色(RGB)图像直方图

在一些场合中我们并不能直接将图片转化为灰度图像来处理(在灰度图像中每个像素点是一个0~255的数值,而在彩色图像中,每个像素点是一个三维坐标系中的一个空间的点),虽然灰度图像可以减少计算量,加快处理速度,但在灰度处理过程中,同样也损失了很多图像特征。例如我们在提取一个图像的前景时需要不改变前景的像素特征时,或我们希望能识别出多张相识图像中的不同特征时,往往需要直接在彩色图片上做处理。同样彩色图片的直方图也可以给我们的处理提供图片信息。

彩色图片获取直方图的原理:前面有提到,彩色图像的每个像素点是由三维空间的向量组成,分别为R、G、B。那样只要我们分别提取每个像素分量的值,进行统计便可得到个分量的灰度直方图了。

实例:(获取彩色图片的前景)
1.读取图像
2.获取图像RGB三通道灰度直方图
3.提取背景像素阈值
4.以操作像素的方式将背景图片设置成白色(255,255,255),不改变前景
5.显示前景图像

实例现象:
这里写图片描述

这里写图片描述

实例代码:

#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include "histoRGBIME.h"
#include "getForeground.h"
using namespace std;

int main()
{
    cv::Mat grayImage;
    cv::Mat histImage;
    cv::Mat binaryImage;
    histoRGBIME rgbhist;
    getForeGround foreb;

    cv::Mat image = cv::imread("1.png");
    if (image.empty())
    {
        cout << "read image is failure" << endl;
        exit(0);
    }
    cv::resize(image, image, cv::Size(image.cols / 2, image.rows / 2));
    cv::imshow("Origin Image", image);

    rgbhist.outputHistogram(image);

    cv::Mat foreground;
    foreb.outForeground(image, foreground, 30, 60, 25, 50, 10, 50);
    cv::imshow("foreGround",foreground);

    waitKey(0);
}
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值