如何调图像的亮度和对比度?

//如何增加图片的对比度或亮度?
void contrastOrBrightAdjust(InputArray &src,OutputArray &dst,int contrastValue,int brightValue)
{
cv::Mat _dst = cv::Mat::zeros( src.size(), src.type() );
for(int y = 0; y < src.rows; y++ )
{
for(int x = 0; x < src.cols; x++ )
{
for(int c = 0; c < 3; c++ )
{
_dst.at<cv::Vec3b>(y,x)[c]= cv::saturate_cast<uchar>( (contrastValue*0.01)*(src.at<cv::Vec3b>(y,x)[c] ) + brightValue);
}
}
}
dst = _dst;
return;
}row

如何在 cv::imshow() 函数上创建滑块 cv::createTrackbar()

//void callBack(int, void*);
//getTrackbarPos()//获取当前滑块位置
cv::Mat src = cv::Mat::zeros(cv::Size(888,888),3);
cv::nameWindow("Win7",cv::WINDOW_NORMAL);
CV::createTrackbar("Trackbar","Win7",0,100,NULL);
cv::imshow("Win7",src);

如何读取图像和保存图像?

cv::Mat src = imread("C:/Desktop.jpg");
imWrite("C:/Desktops.jpg",src(Rect(0,0,88,88)));

轮廓检测 cv::Canny()

cv::Mat src = imread("C:/Desktop.jpg");
cvtColor(src,src,CV_BGR2GRAY);
Canny(src,src,120,180);
threshold(src,src,0,255,CV_THRESH_OTSU);
cv::nameWindow("Win7",cv::WINDOW_NORMAL);
cv::imshow("Win7",src);
//findContours()//获取轮廓个数
//DrawContours()//画轮廓
//arcLength()//弧长
//approxPolyDP()//轮廓近似
//minAreaRect()//计算最小面积的外接矩形
//contourArea()//计算轮廓内连通区域的面积
//pointPolygenTest()//判断一个点是否在一个多边形内
//mathShapes()//比较两个形状的相似性
//dilate()//膨胀
//resize()//图像的放大和缩小
//GaussianBlur()//高斯滤波
//medianBlur()//中值滤波
//blur()//均值滤波
//bilateralFilter()//双边滤波
//boxFilter()//方框滤波
//split()//分离通道

霍夫直线检测

HoughLins();
HoughLinsP();
//俗话说:好记性不如烂笔头
//用到opencv 中的函数时往往会一时记不起这个函数的具体参数怎么设置,故在此将常用函数做一汇总; Mat srcImage = imread("C:/Users/Administrator/Desktop/车牌识别/车牌图像库/1.jpg");//读入图像函数 imshow("原图",srcImage);//显示图像函数 imwrite("图3.jpg",imageRIO);//保存图像函数 Mat imageRIO = srcImage(Rect(50,50,100,000));//感兴趣区域函数 cvtColor(srcImage,dstImage,CV_BGR2GRAY);//图像灰度化 //边缘检测 Sobel Laplacian Canny 其中Canny算子只能处理(8位)灰度图,其余两种8位32位都可以
Mat grad_x,grad_y;
Sobel(imgGray,grad_x,CV_8U,1,0,3,1,1);//X方向上的Sobel算子检测,其中3,1,0都是默认值 Sobel(imgGray,grad_y,CV_8U,0,1,3,1,0);//Y方向上的Sobel算子检测,其中3,1,0都是默认值 addWeighted(grad_x,0.5,grad_y,0.5,0,dstImage);//合并梯度 Laplacian(imgGray,dstImage,CV_8U); Canny(imgGray,dstImage,50,200,3);//50和200表示第一个滞后性阈值和第二个滞后性阈值,较小者用于边缘连接,较大者控制强边缘的初始段,达阈值opnecv推荐为小阈值的3倍;
//3表示应用的Sobel算子的孔径大小 有默认值为3; // 寻找轮廓 只处理8位 即灰度图像
vector<vector<Point>> contours;
findContours(imgGray,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
drawContours(dstImage,contours,-1,Scalar(0),3);
imshow("轮廓图",dstImage); //阈值化操作
threshold(srcImage,dstImage,100,255,3);
imshow("固定阈值化图像",dstImage);
adaptiveThreshold(imgGray,dstImage,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,3,1);
imshow("自适应阈值化图像",dstImage); // resize函数实现
resize(srcImage,dstImage,Size(),0.5,0.5);//缩小为一半
resize(srcImage,dstImage,Size(),2,2);//放大2倍
resize(srcImage,dstImage,Size(srcImage.cols*3,srcImage.rows*3));//放大3倍 // 金字塔函数实现
pyrUp(srcImage,dstImage,Size(srcImage.cols*2,srcImage.rows*2));// 放大2倍
pyrDown(srcImage,dstImage,Size(srcImage.cols/2,srcImage.rows/2));// 缩小2倍 //漫水填充算法
Rect ccomp;
floodFill(srcImage,Point(50,300),Scalar(155,255,55),&ccomp,Scalar(20,20,20),Scalar(20,20,20)); //膨胀腐蚀
Mat element = getStructuringElement(MORPH_RECT,Size(15,15));
erode(srcImage,dstImage,element);//腐蚀函数
dilate(srcImage,dstImage,element);//膨胀函数 morphologyEx(g_bgrImage,g_bgrImage, MORPH_CLOSE, element);//闭运算 morphologyEx(g_bgrImage,g_bgrImage, MORPH_OPEN, element);//开运算 //滤波
boxFilter(srcImage,dstImage,-1,Size(3,3));
imshow("方框滤波图",dstImage); blur(srcImage,dstImage,Size(3,3));
imshow("均值滤波图",dstImage); GaussianBlur(srcImage,dstImage,Size(5,7),1,1);
imshow("高斯滤波图",dstImage); medianBlur(image,out,7);//中值滤波,7为孔径的线性尺寸
bilateralFilter(src,dst,d,sigmaColor,sigmaSpace);//双边滤波,d表示过滤过程中每个像素邻域的直径,sigmaColor颜色空间滤波器的sigma值,sigmaSpace表示坐标空间中滤波器的sigma值
bilateralFilter(image,out,25,25*2,25/2); //《未完待续》
关于“轮廓检测”和“边缘检测”这两个自己也弄的不是特别清楚,可能确实比较相似吧。下面简单说一下自己的看法。
区别:
边缘检测主要是通过一些手段检测数字图像中明暗变化剧烈(即梯度变化比较大)像素点,偏向于图像中像素点的变化。
如canny边缘检测,结果通常保存在和源图片一样尺寸和类型的边缘图中。
轮廓检测指检测图像中的对象边界,更偏向于关注上层语义对象。
如OpenCV中的findContours()函数, 它会得到每一个轮廓并以点向量方式存储,除此也得到一个图像的拓扑信息,即一个轮廓的后一个轮廓、前一个轮廓、父轮廓和内嵌轮廓的索引编号。
联系:
我们在做图像的轮廓检测时通常可以先检测边缘,再将检测到的边缘进行进一步处理,得到图像的轮廓。

Opencv 3.3.0 常用函数的更多相关文章

  1. Delphi7.0常用函数-属性-事件

    abort 函数 引起放弃的意外处理 addexitproc 函数 将一过程添加到运行时库的结束过程表中 addr 函数 返回指定对象的地址 adjustlinebreaks 函数 将给定字符串的行分 ...

  2. Delphi 7.0常用函数速查手册(磁盘文件类)

    在Delphi 7.0中,已为我们定义好了非常多的函数,大致分类有6种:数据类型转换函数.字符串.数组操作函数.文件.磁盘操作函数.内存.指针操作函数.数学运算函数.日期函数. 在Delphi中调用函 ...

  3. Hive2.0常用函数(对编辑器很无语😓)

    Hive内部提供了很多函数给开发者使用,包括数学函数,类型转换函数,条件函数,字符函数,聚合函数,表生成函数等等,这些函数都统称为内置函数. 参考:https://cwiki.apache.org/c ...

  4. selenium2.0 --常用函数2

    新建实例driver = webdriver.Chrome() 1.获取当前页面的Url函数 方法:current_url 实例: driver.current_url 2.获取元素坐标 方法:loc ...

  5. Python 数据类型,常用函数方法分类

    Python基本数据类型:(int) 字符串(str)列表(list)元组(tuple)字典(dict)布尔(bool) python中可以简单使用 类型(数据)创建或转换数据 例: #字符串转数字 ...

  6. OpenCV图像处理中常用函数汇总(1)

    //俗话说:好记性不如烂笔头 //用到opencv 中的函数时往往会一时记不起这个函数的具体参数怎么设置,故在此将常用函数做一汇总: Mat srcImage = imread("C:/Us ...

  7. opencv学习笔记——cv::CommandLineParser函数详解

    命令行解析类CommandLineParser 该类的作用主要用于命令行的解析,也就是分解命令行的作用.以前版本没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,并且输入 ...

  8. OpenCV 学习笔记03 findContours函数

    opencv-python   4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...

  9. opencv-学习笔记(1)常用函数和方法。

    opencv-学习笔记(1)常用函数和方法. cv2.imread(filename,falg) filename是文件名字 flag是读入的方式 cv2.MREAD_UNCHANGED :不进行转化 ...

随机推荐

  1. springboot之fastjson

    <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifac ...

  2. js_1_变量类型

    js中有哪些变量类型? 数字(包括int和float),字符串,数组(字典,js没有字典类型,把字典看成一个对象) 如何把字符转成数字呢? obj.parseInt()         //  转化成 ...

  3. java里程碑之泛型--类型通配符

    1,泛型与数组在子类上面的对比 在整理java泛型的类型通配符之前,我们先来研究下java在数组设计上的一个不合理.我们来看下面代码: public class Test { public stati ...

  4. 面向对象_04【关键字:super使用】

    super关键字:解决当子类重写父类对象方法后,子类对象无法访问父类的成员1,调用父类成员变量和方法 super.成员变量 super.成员方法([参数1,参数2.......])Example: / ...

  5. HH的项链

    传送门 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链变得越 ...

  6. appium问题整理

    在刚进入appium的世界时,遇到无数的坑,趟过无数的浑水,现在整理一些常用的报错讯息,供大家参考 1.org.openqa.selenium.remote.UnreachableBrowserExc ...

  7. SpringMVC空字符串转为null

    空字符串转为null 现在我遇到这样一个需求,那就是我想要吧前端传过来的值变为空,因为所谓前端的校验,其实都不是校验,如果前端传给后台一个表单,可是表单未填入值,我们后台进行判断的时候 既需要判断nu ...

  8. 《收藏》对servlet原理讲解特别详细

    转载:http://blog.csdn.net/javaloveiphone/article/details/8154791 内容: 一.先从servlet容器说起:大家最为熟悉的servlet容器就 ...

  9. JAVA并发编程学习笔记------基础构建模块

    一.并发容器:ConcurrentHashMap:1.分段锁机制: 任意数量的读取线程可以并发的访问map,执行读取操作的线程和执行写入操作的线程可以并发的访问Map,并且一定数量的写入线程可以并发的 ...

  10. Django REST framework反向生成url

    Django REST framework是一个基于Django的框架,REST framework又是怎么反向生成url的呢?? 在前面的例子中,知道在REST framework中有6种版本控制的 ...