最近学了点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. JAVA基础知识之多线程——线程组和未处理异常

    线程组 Java中的ThreadGroup类表示线程组,在创建新线程时,可以通过构造函数Thread(group...)来指定线程组. 线程组具有以下特征 如果没有显式指定线程组,则新线程属于默认线程 ...

  2. SQL生成规则数

    --------------------------开始----------------------------开始值DECLARE @start INT = 1--结束值DECLARE @end I ...

  3. linux 网络通信

    网络命令 历史上最早的即时通信 1 write linzhiling (内容) ctrl+D结束 这样一封信就写出去了,注意:只有用户在线才可以发送 2 wall (write all) 给所有的用户 ...

  4. IOS Bug分析

    异常代码是SIGABRT.通常,  SIGABRT 异常是由于某个对象接收到未实现的消息引起的. 或者,用简单的话说,在某个对象上调用了不存在的方法. iOS应用崩溃日志分析 分析iOS Crash文 ...

  5. pt-query-digest怎么分析慢查询日志分析数据

    在进行使用linux系统作为服务器的情况,那几需要进行对linux的服务器进行性能上数据进行抓取之后,就需要对数据中内容进行分析,看数据库中内容是否存在瓶颈上的问题,在进行获取到的数据的慢查日志,将使 ...

  6. 【leetcode❤python】121. Best Time to Buy and Sell Stock

    #-*- coding: UTF-8 -*- #Method1 :超时#class Solution(object):#    def maxProfit(self, prices):#      # ...

  7. [HDOJ5933]ArcSoft's Office Rearrangement(贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5933 题意:长度为nn的数组: a_1, a_2, \cdotsa​1​​,a​2​​,⋯, 每次操作 ...

  8. hdu 5693 朋友 博弈

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Descr ...

  9. hdu 3054 Fibonacci 找循环节的公式题

    Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Proble ...

  10. POJ3009 Curling

    题目链接:http://poj.org/problem?id=3009 题意:从2出发,要到达3, 0可以通过,碰到1要停止,并且1处要变成0, 并且从起点开始沿着一个方向要一直前进,直至碰到1(或者 ...