`
rys5851968
  • 浏览: 148765 次
社区版块
存档分类
最新评论

opencv图像处理基本操作

 
阅读更多

1. 矩阵数据类型
通用矩阵数据类型:
<wbr><wbr><wbr><wbr><wbr>CV_&lt;bit_depth&gt;(S|U|F)C&lt;number_of_channels&gt;<br> 其中,S表示带符号整数;<br><wbr><wbr><wbr><wbr><wbr>U表示无符号整数;<br><wbr><wbr><wbr><wbr><wbr>F表示浮点数;<br> 例如:CV_8UC1 表示8位无符号单通道矩阵;<br>    CV_32FC2 表示32位浮点数双通道矩阵;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

2. 图像数据类型
通用图像数据类型为:
   IPL_DEPTH_<bit_depth>(S|U|F)
如:IPL_DEPTH_8U 表示8位无符号整数图像;
  IPL_DEPTH_32F 表示32位浮点数图像;

3. 分配和释放图像
3.1 分配一幅图像

  IpIImage * cvCreateImage(cvSize size, int depth, int channels);
其中size可以用cvSize(width, height)得到。
depth为像素的单位,包括:
IPL_DEPTH_8U
IPL_DEPTH_8S
IPL_DEPTH_16U
IPL_DEPTH_16S
IPL_DEPTH_32S
IPL_DEPTH_32F
IPL_DEPTH_64F
channels为每个像素的通道数,可以是1,2,3或4。通道是交叉排列的,一幅彩色
图像的通常的排列顺序是:
b0<wbr>g0<wbr>r0<wbr>b1<wbr>g1<wbr>r1<wbr>...</wbr></wbr></wbr></wbr></wbr></wbr>

例如:分配一个单通道单字节图像的语句是:
IpIImage* img1 = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1);

分配一个三通道浮点数图像语句是:
IpIImage* img2 = cvCreateImage(cvSize(640, 480), IPL_DEPTH_32F, 3);

3.2 释放图像
void cvReleaseImage(IpIImage **);

3.3 复制一幅图像
IpIImage* cvCloneImage(IpIImage *);
如:
IpIImage* img1 = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1);
IpIImage* img2;
img2 = cvCloneImage(img1);

3.4 设置或得到感兴趣区域ROI
void cvSetImageROI(IpIImage* image, cvRect rect);
void cvResetImageROI(IpIImage* image);
vRect cvGetImageROI(const IpIImage* image);

4. 图像的读写
4.1 从文件中获取图像
从文件中读取图像可以采用下面的语句:
IpIImage* img = 0;
img = cvLoadImage(filename);
if (!img)
<wbr>printf("Could not load image file: %s\n", filename);<br><wbr><br> 默认为读取三通道图像。如果改变设置则采用如下的方式:<br> img = cvLoadImage(filename, flag);<br> 当flag &gt; 0时,表示载入图像为3通道彩色图像;<br> 当flag = 0时,表示载入图像为单通道灰色图像;<br> 当flag &lt; 0时,表示载入图像由文件中的图像通道数决定。</wbr></wbr>


5. 图像转换
5.1 将灰度图像转换为彩色图像

cvConvertImage(src, dst, flags = 0);
其中,src表示浮点(单字节)灰度(彩色)图像;
<wbr><wbr><wbr><wbr><wbr>dst表示单字节灰度(彩色)图像;<br><wbr><wbr><wbr><wbr><wbr>flags表示<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>+--- CV_CVTIMG_FLIP,<wbr><wbr><wbr>垂直翻转<br><wbr><wbr><wbr><wbr><wbr>flags = |<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>+--- CV_CVTIMG_SWAP_RB, 交换R和B通道<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><strong>5.2 将彩色图像转换为灰度图像</strong><br> cvCvtColor(cimg, gimg, CV_RGB2GRAY);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

5.3 彩色空间的转换
cvCvtColor(src, dst, code);
其中code为:CV_<X>2<Y>,而<X>,<Y> = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS。

6. 绘制命令
绘图语句为:
cvRectangle, cvCircle, cvLine, cvPolyLine, cvFillPoly, cvInitFont, cvPutText。

【转】先把需要缩放的部分用cvcopy出来,cvresize,然后再cvcopy回去

cvSetImageROI(img, roi1);IPLImage tempimg= cvCreateImage(//size must be the resized image size//);cvResizeImage(img,rempimg....);cvSetImageROI(img,newroi);cvCopy(tempimg,img);

其实他把这个问题复杂化了,对指定部分缩放,首先要说明自己对哪个部分

感兴趣cvSetImageROI,通过这个函数,图像就仅仅剩下了ROI部分,然后

通过cvResize()把这个ROI区域按照自己的意愿放大缩小,我自己编程如下:

::cvSetImageROI(src,cvRect(src->width/4,src->height/4,src->width/2,src->height/2));
IplImage* temp=::cvCreateImage(cvSize(src->width,src->height),src->depth,src->nChannels);
::cvResize(src,temp);
::cvNamedWindow(wndName1,1);
::cvShowImage(wndName1,temp);
::cvWaitKey(0);

感兴趣区域为中间的区域,大小为原来的1/2,重新划分后感兴趣区域为原来

大小,搞定。

分享到:
评论

相关推荐

    《Opencv图像处理编程示例》pdf+代码+数据

    《OpenCV图像处理编程实例》以OpenCV开源库为基础实现图像处理领域的很多通用算法,并结合当今图像处理领域前沿技术,对多个典型工程实例进行讲解及实现。全书内容覆盖面广,由基础到进阶,各个技术点均提供详细的...

    OpenCV图像处理编程实例

    《OpenCV图像处理编程实例》以OpenCV开源库为基础实现图像处理领域的很多通用算法,并结合当今图像处理领域前沿技术,对多个典型工程实例进行讲解及实现。全书内容覆盖面广,由基础到进阶,各个技术点均提供详细的...

    opencv图像处理基础参考Program.zip

    OPENCV学习历程,内容如下: 1.像素指针-.ptr()方法 2.图像滤波-filter2D() 3.图像卷积-filter2D() 4.图像转换-cvtColor() 5.sobel算子-Sobel() 6.图像运算-addWeighted() 7.图像指针-.at(row, col)[0]方法 8.图形...

    数字图像处理_opencv_图像处理_

    基本opencv数字图像处理操作

    OpenCV图像处理资源合集

    opencv图像处理 OpenCV是一个开源的计算机视觉库,提供了很多图像处理、计算机视觉和机器学习等方面的函数和工具,被广泛应用于各种计算机视觉领域的研究和应用中。本文将介绍如何使用OpenCV进行图像处理,包括图像...

    opencv图像基础操作(python版).rar

    opencv图像基础操作(python版),opencv的一些最基本的操作,可供初学者参考,IDE为VS2017

    Python Opencv图像处理基本操作代码详解

    主要介绍了Python Opencv图像处理基本操作代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    opencv对图像处理的基本操作

    python+opencv对图像处理的基本操作,读取图片,灰度化处理

    数字图像处理基础(openCV).md

    openCV的数字图像处理基础操作(部分)

    基于OPENCV的完整图像处理程序

    基于opencv1.0 VC++6.0MFC写的完整的图像处理程序,功能齐全(图像基本操作:旋转、镜像、反色、图像二值化、图像分割、图像增强、灰度直方图均衡、线性变换、灰度拉伸)、边缘检测(prewitt算子、sobel算子、canny...

    基于Android的OpenCV图像仿射翻译操作的实现

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,网络上一些小伙伴写的一些关于Android版OpenCV的博客,大部分都模糊不清,基本就复制粘贴的,有些甚至没有实践就直接贴上去了,这样...

    OpenCV和MFC的实例+界面程序+各种图像处理操作

    有良好的mfc界面,可以打开图像、视频,并作简单的数字图象处理,视频目标检测、跟踪等等,包含大量的基础算法,基于opencv1.0和vc6.0(vs2008)都可以应用,不用安装,直接编译运行就可以,对于初学者熟悉opencv的...

    OpenCV图像处理基础——基于C++实现

    OpenCV图像处理基础——基于C++实现版本视频培训课程概况:教程中会讲解到OpenCV的基础知识及使用方法,并基于OpenCV实现基础的图像处理算法;除此之外课程包含如下的内容: 图像颜色空间及类型转换及应用(BGR、...

    基于Android的OpenCV图像旋转操作的实现

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,网络上一些小伙伴写的一些关于Android版OpenCV的博客,大部分都模糊不清,基本就复制粘贴的,有些甚至没有实践就直接贴上去了,这样...

    OpenCV图像像素操作示例代码

    这是一段使用OpenCV和NumPy库进行图像像素操作的示例代码。代码中创建了一个黑色图像,并通过访问图像的通道(蓝色、绿色、红色)来操作像素值。...这对于图像处理和计算机视觉的初学者和从业者都是有用的参考示例。

    基于Android的OpenCV图像缩放操作的实现

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,网络上一些小伙伴写的一些关于Android版OpenCV的博客,大部分都模糊不清,基本就复制粘贴的,有些甚至没有实践就直接贴上去了,这样...

    基于opencv的图像形态学处理

    最基本的形态学操作有膨胀(dilate)与腐蚀(erode)可消除噪音,分割图像的功能。

    opencv图像的基本处理【平移,旋转,缩放】

    实现了C语言和opencv架构下对图像的基本操作技术,平移,旋转,缩放。

    基于自实现opencv图像处理函数的静态车道线检测项目源码.zip

    - [**基于自实现opencv图像处理函数的静态车道线检测项目**](#基于自实现opencv图像处理函数的静态车道线检测项目) - [**1.项目背景**](#1项目背景) - [**2.实现**](#2实现) - [**2.1 基本思路: 去噪,边缘提取...

Global site tag (gtag.js) - Google Analytics