• Opencv图像处理基本操作1基本数据类型 图像有若干个通道,灰度图像只有一个通道,而彩色具有红,绿,蓝组成,但是OpenCv以逆序的方式来存储三个分量,还可以使用第四个透明度(alpha),可以使用img.channels()获取...
    ##Opencv图像处理基本操作
    
    ##1基本数据类型
    >  **图像有若干个通道,灰度图像只有一个通道,而彩色具有红,绿,蓝组成,但是OpenCv以逆序的方式来存储三个分量,还可以使用第四个透明度(alpha),可以使用`img.channels()`获取图像通道个数。**
    
    使用若干个位存储一副图像的每个像素,这被称为图像的深度,灰度图像为8位,即`0-255`个灰度级,可以用`img.depth()`获得图像的深度,其返回值为:
    
    > CV_8U - 8-bit unsigned integers ( 0..255 )
    CV_8S - 8-bit signed integers ( -128..127 )
    CV_16U - 16-bit unsigned integers ( 0..65535 )
    CV_16S - 16-bit signed integers ( -32768..32767 )
    CV_32S - 32-bit signed integers ( -2147483648..2147483647 )
    CV_32F - 32-bit floating-point numbers ( -FLT_MAX..FLT_MAX, INF, NAN )
    CV_64F - 64-bit floating-point numbers ( -DBL_MAX..DBL_MAX, INF, NAN )
    
    **对于灰度图像和彩色图像,最常见的是`CV_8U`.**
    
    ```
    Mat img=imread("lena.png",IMREAD_GRAYSCALE);
    Mat fp;
    img.convertTo(fp,CV_32F);//改变图像的深度
    ```
    ##2 像素级访问
    
    **1. 第一种方法:模板函数at**
    
    ```
    uchar pixel=img.at(0,0);  //获得灰度图像0,0点像素
    Vec3b pixel=img.at(0,0);  //获得3波段图像的第一个波段(0,0)像素。
    ```
    第一种方法,效率不高,必须定位到他所在的位置
    
    **2. 第二种方法:函数ptr**
    
    **他返回图像特定行的指针**。因此可以得到每一行的数据,时间复杂度降低,
    如下代码获取一副彩色图像的每个像素值。
    
    ```
    //时间复杂度大大降低!!!
    uchar R,G,B;
    for (int i=0;i(i);
    for (int j=0;j double to=(double)getTickCount();
    > elapsed=((double)getTickCount()-to)/getTickFrenquency()
    
    ##图像位运算
    
    可以用掩码对一个图像进行处理,位元算有:
    
    > void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray())
    > 其中src1是原始的图像,src2是掩码,dst为输出
    
    **一个例子:**
    
    ```
    #include
    #include   
    using namespace cv;
    using namespace std;
    int main() {
    	Mat img = imread("cute.jpg", 1);
    	if (img.empty())
    		cout 
    #include 
    #include 
    #include 
    #include 
    using namespace cv;
    using namespace std;
    int main(int argc, char** argv)
    {
    		double alpha = 0.5; double beta; double input;
    		Mat src1, src2, dst;
    		/// Ask the user enter alpha
    		std::cout > input;
    		/// We use the alpha provided by the user if it is between 0 and 1
    		if (input >= 0.0 && input (y,x)[c]` 这里的y为行,x为列,c代表R, G or B (0, 1 or 2)
    ```
    int main(int argc, char** argv)
    {
    		double alpha; /**> alpha;
    		std::cout > beta;
    		/// Do the operation new_image(i,j) = alpha*image(i,j) + beta
    		for (int y = 0; y (y, x)[c] =
    						saturate_cast(alpha*(image.at(y, x)[c]) + beta);//saturate_cast to make sure the values are valid.
    				}
    			}
    		}
    		namedWindow("Original Image", 1);
    		namedWindow("New Image", 1);
    		imshow("Original Image", image);
    		imshow("New Image", new_image);
    		waitKey();
    		return 0;
    }
    ```
    示例如下:可以看到改变的图片的对比度和亮度。
    ![这里写图片描述](https://img-blog.csdn.net/20160814171444887)
    
    **这里可以用函数`image.convertTo(new_image, -1, alpha, beta);`来代替for循环,它会更有效率。**
    
    ##Basic Drawing
    
    **1. 定义一个点 2D**
    ```
    Point pt;
    pt.x = 10;
    pt.y = 8;
    Point pt = Point(10, 8);
    ```
    **2. 画椭圆ellipse原型**
    `void ellipse(InputOutputArray img, Point center, Size axes,
                            double angle, double startAngle, double endAngle,
                            const Scalar& color, int thickness = 1,
                            int lineType = LINE_8, int shift = 0);`
                        
    后面三个为默认的参数,可以不写。
    ```
    //自己写的函数,指定img,和角度
    void MyEllipse(Mat img, double angle)
    {
    	int thickness = 2;
    	int lineType = 8;
    	ellipse(img,
    		Point(w / 2, w / 2),
    		Size(w / 4, w / 16),
    		angle,
    		0,
    		360,
    		Scalar(255, 0, 0),  //为颜色
    		thickness,
    		lineType);
    }
    //**调用方法:**
    MyLine(rook_image, Point(0, 15 * w / 16), Point(w, 15 * w / 16));
    ```
    **3. 画线段**
    
    **函数原型**
    `void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
                         int thickness = 1, int lineType = LINE_8, int shift = 0);`
    
    ##Random generator and text with OpenCV
    
    随机数产生类Random Number generator class (RNG)
    
    ```
    RNG rng( 0xFFFFFFFF );//创建一个RNG类,并对其进行初始化
    //在[a,b)中随机产生一个数
    C++: int RNG::uniform(int a, int b)
    C++: float RNG::uniform(float a, float b)
    C++: double RNG::uniform(double a, double b)
    //a – lower inclusive boundary of the returned random numbers.
    //b – upper non-inclusive boundary of the returned random numbers.
    RNG rng;
    
    // always produces 0
    double a = rng.uniform(0, 1);
    
    // produces double from [0, 1)
    double a1 = rng.uniform((double)0, (double)1);
    
    // produces float from [0, 1)
    double b = rng.uniform(0.f, 1.f);
    
    // produces double from [0, 1)
    double c = rng.uniform(0., 1.);
    
    // may cause compiler error because of ambiguity:
    //  RNG::uniform(0, (int)0.999999)? or RNG::uniform((double)0, 0.99999)?
    double d = rng.uniform(0, 0.999999);
    ```
    ##Random color
    一副彩色图像由R,G,B组成,可用RNG产生随机的颜色。
    ```
    static Scalar randomColor( RNG& rng )
    {
    int icolor = (unsigned) rng;
    return Scalar( icolor&255, (icolor>>8)&255, (icolor>>16)&255 );
    }
    ```
    ##Put out the text
    获得一个字符串的宽度和高度:
    `C++: Size getTextSize(const string& text, int fontFace, double fontScale, int thickness, int* baseLine)`
    例如:
    `Size textsize = getTextSize("OpenCV forever!", CV_FONT_HERSHEY_COMPLEX, 3, 5, 0);`
    将其输出:
    `C++: void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false )`
    展开全文
  • Python+OpenCV实时图像处理 2020-05-28 12:36:03
    目录 ...初学OpenCV图像处理的小伙伴肯定什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可各位调参、测试...
  • Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用...
  • opencv对图像进行处理 2018-03-24 20:30:10
    把有用的博文收藏一下http://blog.csdn.net/ab1322583838/article/details/52048141如何对图像的像素进行操作:http://www.xuebuyuan.com/1730735.htmlMat的属性:...
  • 基于OpenCV最新版本OpenCV4开始,从基础开始,详解OpenCV核心模块Core、Imgproc、video analysis核心API与相关知识点,讲解从图像组成,像素操作开始,一步一步教你如何写代码,如何用API解决实际问题,从图像处理到...
  • OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授...
  • OpenCV图像处理知识 2019-05-04 00:11:24
    OpenCV图像处理知识 OpenCV图像处理参考博客
  • 1.有一个小游戏,就给出两张内容几乎差不多全部相同的图像,让大家在最快的时间内找出两个图像中有几处不同地方,我这里试着用OpenCV实现这个功能。 2.我的编程环境是Windows 7 64位,IDE是VS2015,配置了OpenCV3.3...
  • Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用...
  • OpenCV学习数字图像处理 2018-02-03 17:12:34
    OpenCV是学习数字图像处理的好工具,本专栏拟打算从对OpenCV源码的学习来研究数字图像处理中的基本操作。我开设本专栏不为别的,只希望能系统地学习OpenCV,并把我支离破碎的数字图像处理知识好好理一理。当然,最终...
  • 虽然单单要做车牌号识别的话不需要特别多种类的图像处理,但是我们不能只是为了这么一个目标去学习,所以这次就讲一些OpenCV里基本的图像处理,大家以后可以根据需求使用不同的图像处理。 一、图像显示 这一步在...
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。...
  • OpenCV图像处理常用手段 2018-11-14 16:29:14
    全局固定阈值很容易理解,就是整幅图像都是用一个统一的阈值来进行二值化; 局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。   #include<opencv2\opencv.hpp&gt...
  • 本篇文章讲解图像灰度化处理的知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,使用像素处理方法对图像进行灰度化处理。基础性知识希望您有所帮助。 1.图像灰度化原理 2.基于OpenCV图像灰度化处理 3....
  • OpenCV图像处理编程实例》-源码,最新更新20160801,支持OpenCV3.1+VS2015,修改若干程序中错误,如遇问题欢迎反馈到zhu1988wei@163.com
  • 所以不能Ros中获取的图像不能直接用OpenCV进行处理,需要进行格式转化。还好,Ros中提供了进行ROS和OpenCV之间图像信息格式转化的接口CvBridge 下面附上Ros官网提供的源码: #include #include #include #inclu
  • 使用GPU提高OpenCV图像处理运算速度OpenCV中提供了GPU模块,可以用来加速图像处理的相关运算。OpenCV的GPU模块是使用CUDA编写的。OpenCV中GPU模块的调用点击这里,使用GPU模块需要开启WITH_CUDA选项。OpenCV官方...
  • opencv 图像处理常用特效 2019-03-10 14:21:56
    使用opencv 进行图像特效的处理,包括 灰度图像处理(基础),图像颜色反转,图像马赛克效果,图像毛玻璃效果,图像边缘检测,图像融合,浮雕效果,颜色映射效果,油画特效,使用opencv 3 python版本 3.6 ...
  • 1、利用 OpenCV 读取图像。 具体内容:用打开 OpenCV 打开图像,并在窗口中显示 2、灰度图像二值化处理 具体内容:设置并调整阈值对图像进行二值化处理。 3、灰度图像的对数变换 具体内容:设置并调整 r 值对图像...
  • OpenCV图像处理细节汇总 2018-05-30 11:56:03
    最近在学习OpenCV中算法的基础知识,发现很多细节,记录下来。 仿射变换和投影变换 仿射变化是图像在二维平面上进行变换,需要三个点的位置就能确定前后变换的模式,就像放在桌子上的一张纸,你只能转,裁剪,...
1 2 3 4 5 ... 20
收藏数 72,642
精华内容 29,056