#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;/*
001:实现蓝色与白色互换
这儿先把图片里面的蓝色全变成255
然后利用LUT查找表,将大于某个亮度的像素点设置为蓝色
将小于某个亮度的设置为白色(这个操作不是很严密)
*/
#if 0
int main()
{Mat Input = imread("0002.jpg");if (!Input.data){cout << "ERROR" << endl;return -1;}Mat Output = Mat(Input.size(), Input.type());Mat blue_to_255 = Mat(Input.size(), Input.type());cv::namedWindow("OutPut", WINDOW_AUTOSIZE);std::vector<cv::Mat> mv;split(Input,mv);mv[0] = 255;cv::merge(mv, blue_to_255);uchar lut_data[256 * 3];int j = 0;for (int i = 0; i < 256; i++){if (i > 230){lut_data[i * 3] = 255;lut_data[i * 3 + 1] = 0;lut_data[i * 3 + 2] = 0;}if (i <= 230){lut_data[i * 3] = 255;lut_data[i * 3 + 1] = 255;lut_data[i * 3 + 2] = 255;}}Mat lut(1, 256, CV_8UC3, lut_data);cv::LUT(blue_to_255, lut,Output);cv::imshow("OutPut", Output);cv::waitKey(0);return 0;
}
#endif
/*
002:实现滚动条改变亮度和对比度
正因为滚动条那个函数是要固定格式的,我设置两个假的函数满足这一要求
在假的函数里面调用真的有用的函数,可是数据传参有障碍,因此设置了全局变量
Mat g_Input;
Mat g_Output;
表示input和output在两个函数中,对于亮度,就是遍历像素点,对每一个像素点的三个通道的值调高
对于对比度,只是在一定范围内,每一个通道进行分离,使得两个方差变大
这里的实现不是很严谨,待修改
*/
#if 0int Brightness_now=0;
int Contrast_now=0;Mat g_Input;
Mat g_Output;void Enlighten(Mat in,Mat out);
void Create_Contrast(Mat in, Mat out);
void formality_1(int i, void* userdata);
void formality_2(int i, void* userdata);int main()
{Mat Input = imread("0002.jpg");if (!Input.data){cout << "ERROR" << endl;return -1;}Input.copyTo(g_Input);Input.copyTo(g_Output);namedWindow("Output", WINDOW_AUTOSIZE);createTrackbar("Brightness", "Output", &Brightness_now, 255, formality_1);createTrackbar("Contrast", "Output", &Contrast_now, 100, formality_2);while (1){imshow("Output", g_Output);waitKey(300);}waitKey(0);return 0;}void formality_1(int i, void* userdata)
{Enlighten(g_Input, g_Output);
}void formality_2(int i, void* userdata)
{Create_Contrast(g_Input, g_Output);
}
void Enlighten(Mat in, Mat out)
{for (int i = 0; i < in.rows; i++)for (int j = 0; j < in.cols; j++)for (int k = 0; k < in.channels(); k++)out.at<Vec3b>(i, j)[k] = saturate_cast<uchar>(in.at<Vec3b>(i, j)[k] + Brightness_now);
}
void Create_Contrast(Mat in, Mat out)
{for (int i = 0; i < in.rows; i++)for (int j = 0; j < in.cols; j++)for (int k = 0; k < in.channels(); k++){if(saturate_cast<uchar>(in.at<Vec3b>(i, j)[k])<100)out.at<Vec3b>(i, j)[k] = saturate_cast<uchar>(in.at<Vec3b>(i, j)[k] - Contrast_now*2);else if ((saturate_cast<uchar>(in.at<Vec3b>(i, j)[k]<150)))out.at<Vec3b>(i, j)[k] = saturate_cast<uchar>(in.at<Vec3b>(i, j)[k] - Contrast_now);else if ((saturate_cast<uchar>(in.at<Vec3b>(i, j)[k] < 200)))out.at<Vec3b>(i, j)[k] = saturate_cast<uchar>(in.at<Vec3b>(i, j)[k] + Contrast_now);elseout.at<Vec3b>(i, j)[k] = saturate_cast<uchar>(in.at<Vec3b>(i, j)[k] + Contrast_now*2);}}#endif
/*
003:实现鼠标处的像素点读取
主要是现学鼠标响应函数的格式,鼠标处理程序的格式
*/
#if 1
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
void on_mouse(int EVENT, int x, int y, int flags, void* userdata);
int main()
{namedWindow("output");Mat Output;Output = imread("0002.jpg");setMouseCallback("output", on_mouse, &Output);//鼠标响应函数,和鼠标处理程序搭配使用,后者要自己进行定义while (1){imshow("output", Output);waitKey(40);}
}
//定义鼠标处理程序
void on_mouse(int EVENT, int x, int y, int flags, void* userdata)
{Mat photo_data;photo_data = *(Mat*)userdata;Point photo_point(x, y);switch (EVENT){case EVENT_MOUSEMOVE:{//这里使用的event类型是鼠标移动,如果不移动就是输出这个点的通道值printf("b=%d\t", photo_data.at<Vec3b>(photo_point)[0]);printf("g=%d\t", photo_data.at<Vec3b>(photo_point)[1]);printf("r=%d\n", photo_data.at<Vec3b>(photo_point)[2]);//不能用cout,没有数据类型转换过}break;}
}
#endif//借鉴:https://blog.csdn.net/qq_29540745/article/details/52562101
//      https://blog.csdn.net/mysee1989/article/details/41379817

一些opencv小工程(蓝白转换,进度条亮度对比度,鼠标位置读取rgb)相关推荐

  1. 微信小程序动画之圆形进度条

    微信小程序动画之圆形进度条 上图: 代码: js: //获取应用实例 var app = getApp()var interval; var varName; var ctx = wx.createC ...

  2. 基于canvas 2D实现微信小程序自定义组件-环形进度条

    基于canvas 2D实现微信小程序自定义组件-环形进度条 最近开发一个小程序项目博闻金榜答题小程序,需要使用到一个可以显示答题倒计时的组件,基于进度条实现,下面就主要介绍基于canvas2D实现一个 ...

  3. 原生JS实现拖拽进度条、滚动鼠标显示相应的内容

    今天要分享的是运用原生JS实现拖拽进度条.滚动鼠标显示相应的内容,实现效果如下: 以下是代码实现,欢迎大家复制粘贴. <!DOCTYPE html> <html><hea ...

  4. 微信小程序自定义封装环形进度条组件

    我们先看效果-选不了视频没办法了 说明:此组件对圆的宽度,进度条的宽度.颜色.旋转方向,还有进度条的值,还有两端是否要圆角都进行了动态化,无坑可放心用,参数解释在注释里,我就不写了 .效果图看到尾部的 ...

  5. python进度条 pyqt_pyqt中的进度条没有正确更新以读取fi

    我在一个应用程序中有一个进度条,它应该在文件被读取时继续运行,但它根本没有按照我设置的条件进行更新.似乎我需要给负责更新进度条的变量一个显式的值,而不是另一个变量.请看下面的代码,特别是我的loadf ...

  6. 微信小程序 环形进度条_微信小程序:实时圆形进度条实现

    //获取应用实例var app = getApp()var interval;var varName;var ctx = wx.createCanvasContext('canvasArcCir'); ...

  7. 微信小程序实现加载进度条

    1.实现效果 2.实现原理 2.1第一个线条加载,设置translate3d属性,动态的改变百分比,实现加载. translate3d() CSS 函数在3D空间内移动一个元素的位置.这个移动由一个三 ...

  8. 小程序视频不显示进度条,且不能滑屏快进

    show-progress='{{false}}' controls='{{true}}' enable-progress-gesture="{{false}}"

  9. 微信小程序之圆形进度条(自定义组件)

    前言 昨天在微信小程序实现了圆形进度条,今天想把这个圆形进度条做成一个组件,方便以后直接拿来用. 根据官方文档自定义组件一步一步来 创建自定义组件 第一步创建项目结构 打开微信开发者工具创建一个项目, ...

最新文章

  1. elasticsearch 索引 red 状态恢复 green
  2. ViewPager+Fragment切换时无法更新数据问题解析(源代码分享)
  3. LeetCode(72):编辑距离
  4. 初等代数(3):代数方程、指数与对数、复数
  5. Python函数Day1
  6. 安卓网络编程(Socket、WebView控件)
  7. 前端学习(1978)vue之电商管理系统电商系统之为每一行数据提供单独的value
  8. 数据库和ORMS:使用SQLAlchemy与数据库通信
  9. SSD+caffe︱Single Shot MultiBox Detector 目标检测(一)
  10. js 时间任意格式化 ,又来造轮子了
  11. 数据库连接池的深入理解
  12. 安装mathtype打开word报错 mathtype.Dll cannot be found 解决方式
  13. 深度模型训练之learning rate
  14. 【Day5.4】高棉风格的柴瓦塔纳兰寺
  15. JVM调优工具锦囊:JDK自带工具与Arthas线上分析工具对比
  16. hanoi塔经典递归算法
  17. CentOS7忘记root密码,重置root密码
  18. 智力题:用数字5,5,5,1进行四则运算,每个数字当且仅当用一次,要求运算结果为24
  19. DB2进行压缩的最佳实践
  20. 咋连接到文件共享服务器,连接服务器文件共享

热门文章

  1. acl反掩码匹配奇偶网段
  2. charles误点deny后如何恢复
  3. 要多久人工智能的梦想才能照进现实
  4. opencv基础之--图片颜色反转
  5. 高一凡老师的数据结构
  6. css兼容 IE浏览器字号太小
  7. PVE虚拟机篇-简介
  8. 图解 Python 编程(9) | for循环(附要点速查表·完结)
  9. 抖音只能上下滑动吗_下个抖音不会玩?今天教你浏览抖音的基本姿势
  10. python中的numpy库有什么优缺点_python中关于numpy库的介绍