OpenCV 操作图像的数据区
2014-05-08 17:55
267 查看
OpenCV在图像处理方面跟MATLAB的功能有点相近,提供了一系列图像处理相关的函数,运用的好能极大的加快图像处理相关方面的开发。关于OpenCV的配置网上有很多,随便查一查就可知晓,本文的代码是在VS2013+OpenCV2.4.8的工作环境下进行的,因为变量的名字和使用的方法基本没变,所以同样适用于之前的版本。
本文主要记录如何用OpenCV来操作图像的数据区,跟之前的记录《C/C++ BMP(24位真彩色)图像处理(1)------图像打开与数据区处理》作用类似,但相对而言因为OpenCV本身内置了许多图像的解码器,用OpenCV来打开图像的适用性更广,之后能保存的图像的格式也更多。
包含OpenCV头文件
操作图像的数据区
对于2.0操作图像的数据区会更加方便,如下:
如果是彩色图像可以用如下代码访问:
创建2.0图像则可用如下代码:
本文主要记录如何用OpenCV来操作图像的数据区,跟之前的记录《C/C++ BMP(24位真彩色)图像处理(1)------图像打开与数据区处理》作用类似,但相对而言因为OpenCV本身内置了许多图像的解码器,用OpenCV来打开图像的适用性更广,之后能保存的图像的格式也更多。
包含OpenCV头文件
#include <opencv2/opencv.hpp> using namespace cv;
操作图像的数据区
IplImage* img = NULL;//OpenCV图像数据结构指针 char *filename = "F:\\gopicture\\2.jpg";//要打开图像的路径 char *savename = "F:\\gopicture\\3.jpg";//要存储图像的路径 img = cvLoadImage(filename, 1);//打开图像,这个过去其实也完成了图像的解码,图像的信息存在 IplImage 指针所指的数据结构中 uchar* data = (uchar*)(img->imageData);//声明指针指向图像的数据区 for (int row = 0; row<img->height; row++)//操作数据区,要注意OpenCV的RGB的存储顺序为GBR for (int cols = 0; cols<img->width; cols++)//示例为亮度调节 { data[row*img->widthStep / sizeof(uchar)+cols*img->nChannels + 0] *= 0.5;//G data[row*img->widthStep / sizeof(uchar)+cols*img->nChannels + 1] *= 0.5;//B data[row*img->widthStep / sizeof(uchar)+cols*img->nChannels + 2] *= 0.5;//R } cvSaveImage(savename, img);//存储图像 cvNamedWindow("show", 1);//创建窗口对象用于显示 cvShowImage("show", img);//将图像显示在窗口上 cvReleaseImage(&img);//释放图像数据结构指针对像所指内容
对于2.0操作图像的数据区会更加方便,如下:
Mat Image = cv::imread("test.png", 0);//读入图像,并将图像灰度化 threshold(Image, Image, 50, 255, CV_THRESH_BINARY_INV);//二值化图像 long time = clock();//记录计算时间 for (int Y = 1; Y < Image.rows - 1; Y++)//遍历图像,Y为行,X为列 for (int X = 1; X < Image.cols - 1; X++) { if (Image.at<unsigned char>(Y, X) == 255)//记住这里是先行后列 { Image.at<unsigned char>(Y, X) = 50; } } printf("花费时间%dms\n", clock() - time); imshow("colorImg", Image); waitKey(0);
如果是彩色图像可以用如下代码访问:
img1.at<Vec3b>(Y, X)[0]
创建2.0图像则可用如下代码:
Mat outputimg(img1.rows,img1.cols, CV_8UC3);
相关文章推荐
- 【OpenCV】calcHist在直方图中的使用
- Linux 添加服务详解
- OpenCV 操作图像的数据区
- window.opener 与 window.dialogArguments的用法
- linux shmget
- 转载:执行脚本出现bin/bash: bad interpreter: No such file or directory
- Hadoop操作前准备工作
- 上树建站教程:新手单页网站制作教程上集
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- Apache Traffic Server 4.2.1上的坑!
- OpenCV参考手册之摄像头
- “惊群”,看看nginx是怎么解决它的
- centos下查看磁盘的读写状况
- Linux添加系统调用【傻瓜版】
- linux awk 内置函数详细介绍(实例)
- Mac OSX 10.9搭建nginx+mysql+php-fpm环境
- linux下mysql默认安装目录和常用命令
- Apache DataFu: LinkedIn开源的Pig UDF库
- centos下vi的用法
- Linux系统备份