最近学了点opencv,买了毛星云的书,大力推荐哦。

颜色缩减,自己加了个Trackbar看起来更直观一些。

我一般自己先看一遍程序,脑子里有个大概印象了,再自己写一遍,这样出了错误会印象更深刻。

1. Mat.type( )括号不能丢

2. Mat.channels()括号不能丢

3.创建Trackbar的函数createTrackbar(TrackbarName, WINDOWNAMAE, &sliderValue, maxSliderValue,onTrackbar);

这里onTrackbar是一个回调函数,写在creatTrackbar里时,不用()

在写这个函数时,是要加括号的,调用时候也是哦,

onTrackbar(int , void*)

int 实slierValue,void* 填0貌似就可以了

4.  创建Trackbar之前,一定要

namedWindow(WINDOWNAME, 1);

如果没有此句,就不显示Trackbar,很重要哦 ,这里我犯了错。

char TrackbarName[50];

sprintf(TrackbarName, "颜色缩减值%d",divslider);

这句是用来显示滑动条上说明文字,还是加上比较好。

5.  自己画蛇添足地在onTrackbar 回调函数上加了个while(1),其实不用啦!

6. 颜色缩减函数很容易懂,就不说了。不过不太明白为啥要 data[j] = data[j] / div*div+div/2   这个div/2我不太懂。没有用div/2 也好用来着。

代码如下,要先在工程文件里有个“dota.jpg”

#include <opencv2/opencv.hpp>
#include<highgui.hpp> using namespace cv;
using namespace std;
#define WINDOWNAME "dstImg"
int maxdiv = 255;
Mat dstImg,srcImg;
int divslider;
void colorReduce(Mat& src, Mat& dst, int div);
void on_Trackbar(int ,void*); int main(){ divslider = 20;
srcImg = imread("dota.jpg", 1); dstImg.create(srcImg.cols,srcImg.rows, srcImg.type()); imshow("srcImg", srcImg); namedWindow(WINDOWNAME, 1);//如果没有此句,就不显示Trackbar。
char TrackbarName[50];
sprintf(TrackbarName, "颜色缩减值%d",divslider); createTrackbar("reduce div", WINDOWNAME, &divslider, maxdiv, on_Trackbar); on_Trackbar(divslider, 0);
waitKey(0); return 0;
} void on_Trackbar(int, void*){
if (divslider > 0){
colorReduce(srcImg, dstImg, divslider);
imshow(WINDOWNAME, dstImg);
}
} void colorReduce(Mat& src, Mat& dst, int div){
dst = src.clone();
int rowNum = dst.rows;
int colNum = dst.cols * dst.channels(); for (int i = 0; i < rowNum; i++){
uchar* data = dst.ptr<uchar>(i);
for (int j = 0; j < colNum; j++)
data[j] = data[j] / div*div;
}
}

颜色缩减(带Trackbar)【从毛星云Opencv3编程入门P75 P111例程改编】的更多相关文章

  1. 【浅墨著作】《OpenCV3编程入门》内容简单介绍&amp;勘误&amp;配套源码下载

    经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...

  2. OpenCV3编程入门.记录

    ZC:OpenCV3编程入门_毛星云编著_电子工业出版.pdf 1.在看到 PDF.P134(计算数组加权和:addWeighted()函数)的时候,其中讲到“当输出数组的深度为CV_32S时,这个函 ...

  3. OpenCV3编程入门笔记(1)图像载入、显示、保存、变换灰度图

    图像载入.显示.保存函数: 1         图像载入函数:imread()   Mat imread(const string& filename, int flags=1); const ...

  4. OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换

    腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RE ...

  5. OpenCV3编程入门笔记(3)线性滤波、非线性滤波、图像深度、通道

    15     遍历图像中的像素,是先for行数后for列数的,也就是一列一列的遍历,matlab中是从1开始计数,opnecv中采用c语言的从0开始计数. 矩阵归一化:normalize()函数,参数 ...

  6. OpenCV3编程入门笔记(2)计时函数、感兴趣区域RIO、分离/混合通道

    11     绘制直线的line函数 DrawLine(Mat img, Pont start, Point end); 绘制椭圆的ellipse函数 DrawEllipse(Mat img, dou ...

  7. 《OpenCV3编程入门》访问图像中像素的三类方法

    ·方法一 指针访问:C操作符[ ]; ·方法二 迭代器iterator; ·方法三 动态地址计算; #include <opencv2/core/core.hpp> #include &l ...

  8. OpenCV3编程入门-读书笔记2-core组件

    一.颜色空间缩减 1.概念 如果图像是3通道,深度为1个字节,则每个像素有256*256*256种可能值,这么多的可能值会对算法性能造成严重影响.利用颜色空间缩减就能解决这个问题,例如将颜色值0~9取 ...

  9. OpenCV3编程入门-读书笔记1

    一.OpenCV概述 1.OpenCV全程Open Source Computer Vision Library,即开源计算机视觉库.它是一个跨平台的开源计算机视觉库,可以运行在windows.lin ...

随机推荐

  1. hbase centOS生产环境配置笔记 (1 NameNode, 1 ResourceManager, 3 DataNode)

    本次是第一次在生产环境部署HBase,本文若有配置上的不妥之处还请高手指正. hadoop版本:hadoop-2.4.1 HBase版本:hbase-0.98.6.1-hadoop2 Zookeepe ...

  2. acdream Divide Sum

    Divide Sum Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitSta ...

  3. linux--基础学习笔记--软件安装

  4. 2016年11月2日 星期三 --出埃及记 Exodus 19:18

    2016年11月2日 星期三 --出埃及记 Exodus 19:18 Mount Sinai was covered with smoke, because the LORD descended on ...

  5. JAVA线程池的创建

    /** * 创建不同类型的线程池 Executors * * @author */ public class ThreadPoolTest01 { public static void main(St ...

  6. grails-domain-id 无生成策略,由程序控制

    一 domain class 中标示 class Menu implements Comparable<Menu>{ String id; String name; } static co ...

  7. 3094 寻找sb4

    3094 寻找sb4  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description sb有一天和sml吵架了,她 ...

  8. Java爬虫工程师技能列表

    以下仅仅是自己一些粗浅认识.欢迎补充指正.欢迎进群交流! 掌握一半便能够熟练的开发爬虫玩了.自己正在努力中... 一.技能列表 1.掌握java.尤其编程网络部分:李刚的java基础至少看了三遍以上: ...

  9. Python 2.7.9 Demo - JSON的编码、解码

    #coding=utf-8 #!/usr/bin/python import json; dict = {}; dict['name'] = 'nick'; dict['say'] = 'hello ...

  10. vs配置opencv

    配置OpenCv: 一.新建工程 无论是mfc还是控制台程序都可以. 二.下载opencb,安装在非空格路径下面 解压出来有两个文件夹:build和source,主要用到build,build-x86 ...