文档章节

cv:: split、calcHist、normalize、line直方图计算

元禛慎独
 元禛慎独
发布于 2016/10/14 19:26
字数 328
阅读 29
收藏 0

yuanzhen@bogon:~/C_script$ cat seven.cpp 
#include <iostream>
#include <string>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <boost/progress.hpp>
#include <vector>
#define name_to_str(name) (#name)


using namespace std;

void show_image(cv::Mat image, const char* title="My Picture")
{
    cv::namedWindow(title);
    cv::imshow(title, image);
    cv::waitKey(0);
}
void calchist(cv::Mat &src, cv::Mat &dst, const char*title=name_to_str(dst))
{
    int histSize=256;
    float histranges[]={0,255};
    const float *range_ptr={histranges};
    cv::calcHist(&src,1,0,cv::Mat(),dst,1,&histSize,&range_ptr);
    cout<<dst<<title<<endl;
}

void normalize(cv::Mat &src, cv::Mat &dst, const int high=400)
{
    cv::normalize(src, dst, 0, high, cv::NORM_MINMAX,-1,cv::Mat());
}

int main(int argc, char** argv)
{
    boost::progress_timer t;

    cv::Mat image;
    cv::Mat img_b, img_g, img_r;
    vector<cv::Mat> channel;

    image=cv::imread(argv[1],1);
    cv::split(image, channel);
    /*
    for(int i=0;i<channels.size();i++)
      show_image(channels[i]);
    */
    calchist(channel[0],img_b);
    calchist(channel[1],img_g);
    calchist(channel[2],img_r);
    //cout<<img_b<<endl;
    int hist_w=600, hist_h=300;
    int bin=cvRound((double)hist_w/255);

    cv::Mat histImage(hist_h,hist_w,CV_8UC3, cv::Scalar(0,0,0));
    cout<<image.type()<<"\t"<<img_b.type()<<"\t"<<histImage.type()<<endl;

    normalize(img_b,img_b,histImage.rows);
    normalize(img_g,img_g,histImage.rows);
    normalize(img_r,img_r,histImage.rows);
    cv::line(histImage,cv::Point(0,100),cv::Point(100,200),cv::Scalar(255,255,255),2,8,0);
    for(int i=1;i<256;i++)
    {
        cv::line(histImage, cv::Point(bin*(i-1),hist_h-img_b.at<float>(i-1)),cv::Point(bin*i,hist_h-img_b.at<float>(i)),cv::Scalar(255,0,0));
        cv::line(histImage, cv::Point(bin*(i-1),hist_h-img_g.at<float>(i-1)),cv::Point(bin*i,hist_h-img_g.at<float>(i)),cv::Scalar(0,255,0));
        cv::line(histImage, cv::Point(bin*(i-1),hist_h-img_r.at<float>(i-1)),cv::Point(bin*i,hist_h-img_r.at<float>(i)),cv::Scalar(0,0,255));
    }
    show_image(histImage);
    /*
    for(int i=0;i<256;i++)
    {
        cout<<i<<" = "<<img_b.at<float>(i)<<"\t"<<result.at<float>(i)<<endl;
    }
    */
    //cout<<img_g<<endl;
    cv::destroyAllWindows();
    cout<<t.elapsed()<<endl;
}
 

© 著作权归作者所有

元禛慎独
粉丝 3
博文 209
码字总数 60366
作品 0
朝阳
程序员
私信 提问
图像检索的三种python实现(直方图/OpenCV/哈希法)

简介: 本文介绍了图像检索的三种实现方式,均用python完成,其中前两种基于直方图比较,哈希法基于像素分布。 检索方式是:提前导入图片库作为检索范围,给出待检索的图片,将其与图片库中的...

漫步当下
2018/07/09
0
0
opencv 直方图和直方图反向映射

histogram 使用np进行直方图像素统计 通过histogram对图像的三个通道分别进行一维直方图统计,由于被统计的数组必须是一维的,所以使用ravel将二维数组转换为一维数组,通过range参数指定统计...

阿豪boy
2018/08/25
0
0
opencv3.0中与CUDA相关的头文件和库解释

目前,opencv中的cuda接口能够实现的算法还比较少,并不是很齐全,使用前需要先确定算法是否存在cuda接口 相对2.x的改动 * 不再使用cv::gpu的命名空间,改用cv::cuda * 头文件中需要单独引用...

sirius_0
2018/04/08
0
0
反向投影图

本次要讲的范例是反向投影,反向投影如果是按照字面上的理解,还有书本上的理解可能会比较困难,但是如果是举一些具体的简单的例子,那可能就比较容易接受了,应用的话,可以检测出肤色区域,...

元禛慎独
2016/10/18
4
0
opencv学习(二十六)①控制台颜色设置//②Histgram直方图绘制CalcHist()//③找寻最值函数minMaxLoc()//④直方图比较compareHist()

一,控制台颜色设置 二,直方图绘制CalcHist() 找寻最值函数minMaxLoc() 实例1,H-S二维直方图绘制 实例2,画出一维直方图 实例3,绘制三色直方图 三,直方图比较compareHist() 实际上就是画...

露一手吧
2018/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redux

Redux概念 Redux = Reducer + Flux,数据层框架,将所有数据都存储到store中 Redux的工作流程 Antd的使用 安装npm install antd --save import 'antd/dist/antd.css'import { Input, Butto......

星闪海洋
今天
4
0
OSChina 周一乱弹 —— 你们谁看见了我的诺贝尔奖

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @脚板薯 :这么晚不睡只为找到一首歌,晚安。 ♫Say You Want Me♪ ♫Say You Want Me♪ - Augustana 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
306
17
我为什么要写微信公众号

埋一颗种子,细心呵护,静待她枝繁叶茂,葱郁参天 V2论坛上有个帖子【做程序员最重要的还是一定要有自己的作品】,作者写道: 能有一个作品和你的名字联系在一起,应当成为在职业生涯前期着意...

运维咖啡吧
今天
3
0
数据库

数据库架构 数据库架构可以分为存储文件系统和程序实例两大块,而程序实例根据不同的功能又可以分为如下小模块。 1550644570798 索引模块 常见的问题有: 为什么要使用索引 什么样的信息能成...

一只小青蛙
今天
5
0
PHP常用经典算法实现

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ( $low <= $high){ $mid = int......

半缘修道半缘君丶
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部