|
摘要:最大类间方差法是由日本学者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU。它是按图像的灰度特性,将图像分成背景和目标2部分。背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均灰度记为μ,类间方差记为g。假设图像的背景较暗,并且图像的大小为M×N,图像
阅读全文
摘要:有时候,我们需要提取一个图像的边缘利于计算。 opencv实现了Canny边缘检测的函数,方便调用。Canny算子的原理是首先在x,y方向求一阶导数,然后组合为4个方向的导数。这些方向的导数达到局部最大值的点就是组成边缘的候选点。 1.1cvCanny函数:CVAPI(void) cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size CV_DEFAULT(3) ); 第一个参数:输入:是灰度图,就...
阅读全文
摘要:图像处理里面缩放操作是比较常见的: 最近邻插值:类似简单映射的处理方式,目标图像w1,h1,原始图像w0,h0,则在目标图像上的点(x,y)的像素点实际对应原始图上(x*w0/w1,y*h0/h1)的像素点。优点是速度快,操作简单;缺点是图片会产生锯齿状。 线性插值:对周围的点通过不同权值的乘积,使目标点的像素会受到周围像素的影响,过度更加自然些,即不会产生锯齿状。 对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v) (其中i、j均为浮点坐标的整数部分,u、v为浮点坐标的小数部分,是取值[0,1)区间的浮点数),则这个像素得值 f(i+u,j+v) 可由原图像中坐...
阅读全文
摘要:在图像处理里,如果我们需要填充一个区域,使该区域为相同的颜色,则比较常用的是洪水填充法。洪水填充法可以用DFS也可以用BFS实现。 opencv下有函数实现该功能: CVAPI(void) cvFloodFill( CvArr* image, CvPoint seed_point, CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)), CvScalar up_diff CV_DEFAULT(cvScalarAll(...
阅读全文
摘要:为了处理更为复杂的情况,opencv中还支持更多的形态学变换。形态学名称操作过程操作名称是否需要temp参数开操作 openopen(src)=先腐蚀,后膨胀CV_MOP_OPEN否闭操作 closeclose(src)=先膨胀,后腐蚀CV_MOP_CLOSE否形态梯度 gradientgradient(src)=dilate(scr)-erode(src)CV_MOP_GRADIENT总是“礼帽” topHattopHat(src)=src-open(src)CV_MOP_TOPHATsrc=dst的时候需要“黑帽”blackHatblackHat(src)=close(src)-src..
阅读全文
摘要:腐蚀膨胀是图像形态学比较常见的处理,腐蚀一般可以用来消除噪点,分割出独立的图像元素等。 一般腐蚀操作对二值图进行处理,腐蚀操作如下图,中心位置的像素点是否与周围领域的像素点颜色一样(即是否是白色点,即值是否为255),若一致,则保留,不一致则该点变为黑色(值即为0) opencv中的腐蚀操作:CVAPI(void) cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element CV_DEFAULT(NULL), int iteratio...
阅读全文
摘要:以前的时候,为了过滤图像中的一些噪点,学过一些简单的滤波,比如中值滤波,均值滤波,也是自己实现的。 在opencv中有现成的函数可以调用,实现滤波的操作。 函数的原型如下:CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst, int smoothtype CV_DEFAULT(CV_GAUSSIAN), int size1 CV_DEFAULT(3), int size2 CV_DEFAULT(0), ...
阅读全文
摘要:鼠标事件采用回调函数的形式,即需要鼠标处理点击移动事件的话,首先必须创建一个回调函数。 如下形式:void my_mouse_callback( //回调函数的声明,而回调函数也是需要这种参数格式 int event,int x,int y,int flags,void * param ); 第一个参数是表示鼠标的事件类型,如左键按下去,左键回上来,鼠标移动等。 有如下类型: x,y表示现在鼠标所处的位置, flags表示鼠标事件标志: 最后一个额外的指针,可以传递你所需要的数据指针,这里用来传递image的指针。 下面是注册回调函数到opencv中,...
阅读全文
摘要:一般我们需要对图像直接进行操作的时候,需要知道图像存储的数据结构,这要也就知道了它的遍历方式在opencv2.4.4版本下,IplImage的数据结构如下(貌似在别的版本下差别也不会太大)其中比较重要的是width,height,imageData,widthStep。(其他的刚开始学也知道的不多- -)width,height 就是表示图像的宽度,高度,imageData是一个指向某内存空间的指针,该内存空间里面存放了图像实际像素点的颜色信息(这里是RGB信息)widthstep图像一行像素点所占的字节数,这里是三通道,所以这时widthstep =width * 3知道的上面的基本变量以后
阅读全文
摘要:对实时的视屏流进行处理,实质还是对单幅图片进行处理! #include "stdafx.h"#include "cv.h"#include "highgui.h"int g_slider_position = 0;CvCapture * g_capture =NULL;void onTrackbarSlide(int pos){ //再拖动滚动条的时候,滚动条的位置会被作为int数字传入 cvSetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES, pos );} v...
阅读全文
摘要:视屏的本质是一些静态的图像的集合,opencv可以不断读取视屏中的图片,显示,就产生了类似电影的效果。 这样也就可以通过opencv对实时的视屏流进行处理了。#include "stdafx.h"#include "cv.h"#include "highgui.h"int main(){ cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);//申请可以自动调节大小的窗口Example1 CvCapture *capture=cvCreateFileCapture("F
阅读全文
摘要:opencv是个开源的图像处理的库,小到基本的图像处理函数,如图像移动放大缩小,大到人脸识别,部分机器学习的知识,所以是个学习的不错的库。之前有图像处理的知识,这次再学习下这个开源库。 先上基础的图像读取与显示:#include "stdafx.h"#include "cv.h"#include "highgui.h"int main(){ IplImage *img= cvLoadImage("C:/13.jpg");//读取图片 cvNamedWindow("Example1",CV_WIN
阅读全文
|