OpenCV——黑白调整

参考算法:

闲人阿发伯的博客

// define head function
#ifndef PS_ALGORITHM_H_INCLUDED
#define PS_ALGORITHM_H_INCLUDED

#include <iostream>
#include <string>
#include "cv.h"
#include "highgui.h"
#include "cxmat.hpp"
#include "cxcore.hpp"

using namespace std;
using namespace cv;

void Show_Image(Mat&, const string &);

#endif // PS_ALGORITHM_H_INCLUDED

/*
This program will transform
the color image to Black-whithe
image.

*/

#include "PS_Algorithm.h"
#include <time.h>

using namespace std;
using namespace cv;

int main(void)
{
    string Img_name("9.jpg");
    Mat Img_in;
    Img_in=imread(Img_name);
    Show_Image(Img_in, Img_name);

    Mat Img_out(Img_in.size(), CV_32FC3);
    Img_in.convertTo(Img_out, CV_32FC3);

    Mat R(Img_in.size(),CV_32FC1);
    Mat G(Img_in.size(),CV_32FC1);
    Mat B(Img_in.size(),CV_32FC1);

    Mat I(Img_in.size(),CV_32FC1);

    Mat BW_out(Img_in.size(), CV_32FC1);

    Mat rgb[]={B, G, R};
    cv::split(Img_out, rgb);

    I=B+G+R;

    float maxVal, minVal, midVal;

    float color_ratio[6]={0.4,0.6,0.4,0.6,0.2,0.8};
    float r_max_mid, r_max;
    int Ind;

    for(int i=0; i<I.rows; i++)
    {
        for(int j=0; j<I.cols; j++)
        {
            maxVal=std::max(R.at<float>(i,j), std::max(G.at<float>(i,j),
                                                       B.at<float>(i,j)));
            minVal=std::min(R.at<float>(i,j), std::min(G.at<float>(i,j),
                                                       B.at<float>(i,j)));
            midVal=I.at<float>(i,j)-maxVal-minVal;

            if(minVal==R.at<float>(i,j))
            {
                Ind=0;
            }
            else if(minVal==G.at<float>(i,j))
            {
                Ind=2;
            }
            else
            {
                Ind=4;
            }
            r_max_mid=color_ratio[(Ind+3)%6+1];

            if(maxVal==R.at<float>(i,j))
            {
                Ind=1;
            }
            else if(maxVal==G.at<float>(i,j))
            {
                Ind=3;
            }
            else
            {
                Ind=5;
            }

            r_max=color_ratio[Ind];

            BW_out.at<float>(i,j)=(maxVal-midVal)*r_max+(midVal-minVal)
                      *r_max_mid+minVal;

        }
    }

    BW_out=BW_out/255;
    Show_Image(BW_out, "out");

    imwrite("out.jpg", BW_out*255);

    waitKey();
    cout<<"All is well."<<endl;

}

// define the show image
#include "PS_Algorithm.h"
#include <iostream>
#include <string>

using namespace std;
using namespace cv;

void Show_Image(Mat& Image, const string& str)
{
    namedWindow(str.c_str(),CV_WINDOW_AUTOSIZE);
    imshow(str.c_str(), Image);

}

原图

效果图

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 00:44:39

OpenCV——黑白调整的相关文章

OpenCV入门 - 调整图片尺寸

OpenCV入门 - 调整图片尺寸(image resize) 通过Mat::size()方法得到关于图像大小的Size实例,通过resize方法调整图像大小.代码如下: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/nonfree/features2d.hpp> // #include <opencv2/imgproc/imgpr

OpenCV——饱和度调整

参考: 闲人阿发伯的博客 // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include <iostream> #include <string> #include "cv.h" #include "highgui.h" #include "cxmat.hpp" #include "c

自控力

您下载的该电子书来自:TXT赛看 欢迎访问: www.txtsk.com.cn 你是否有迟迟未打的电话? 你是否瞻前顾后,迟迟迈不出行动的脚步? 你是否常因无法掌控情绪而责备自己? 你是否处事一般都很冷静,心里或许有很多自己的想法, 但是不会轻易暴露出来,不到忍无可忍,不会发脾气的.特别在 公司? 你是否会因心情不好影响工作或会因工作影响心情? 以上现象均为缺乏自控力所致.在我近10年的培训生涯 中,学员们会请教我各种各样的问题,其中在每一场演讲中被 提及的次数最多的问题便是——"我该如何增强自

UI设计师需要熟记的45个快捷键Windows、Mac

大家都知道PS快捷键很多,其实没必要都记住,今天为大家整理了45个比较实用的,别忘了收藏. 图层 填充图层 MAC: Alt+Backspace (前景) or Cmd+Backspace (背景) WINDOWS: Alt+Delete (前景) or Ctrl+Delete (背景) 快速将图层填充为前景色或背景色 平面化图层(盖印图层) MAC: Cmd+Alt+Shift+E WINDOWS: Ctrl+Alt+Shift+E 合并可见图层 MAC: Cmd+Shift+E WINDOW

用OpenCV实现Photoshop算法(三): 曲线调整

http://blog.csdn.net/c80486/article/details/52499919 系列文章: 用OpenCV实现Photoshop算法(一): 图像旋转 用OpenCV实现Photoshop算法(二): 图像剪切 用OpenCV实现Photoshop算法(三): 曲线调整 用OpenCV实现Photoshop算法(四): 色阶调整 用OpenCV实现Photoshop算法(五): 亮度对比度调整 用OpenCV实现Photoshop算法(六): 变为黑白图像 用OpenC

【OpenCV入门教程之六】 创建Trackbar &amp; 图像对比度、亮度值调整(转)

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/21479533 作者:毛星云(浅墨)    邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.8 这篇文章中我们一起学习了如何在OpenCV中用createTrackbar函数创建和使用轨迹条,以及图像对比度.亮度值的动态调整. 文章首先详细讲解了OpenCV2.0中的新版创建轨迹条的函数c

opencv ,亮度调整【【OpenCV入门教程之六】 创建Trackbar &amp; 图像对比度、亮度值调整

http://blog.csdn.net/poem_qianmo/article/details/21479533 [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调整 标签: opencvvs2010c++图像处理 2014-03-18 21:43 43189人阅读 评论(99) 收藏 举报  分类: [OpenCV](18)  目录(?)[+] 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qian

【opencv入门之四】Trackbar、图像对比度、亮度值调整

参考网站: http://blog.csdn.net/poem_qianmo/article/details/21479533 1.轨迹条(Trackbar) createTrackbar函数(创建轨迹条) 注意:它会和一个回调函数配合使用 C++: int createTrackbar(conststring& trackbarname, conststring& winname, int* value, int count, TrackbarCallback onChange=0, v

opencv统计二值图黑白像素个数

#include "iostream" #include "queue" #include "Windows.h" #include <opencv2/ml/ml.hpp> #include "opencv2/opencv.hpp" #include "Windows.h" #include "opencv2/core/core.hpp" #include "ope