opencv基本操作

来源:互联网 发布:linux怎么运行sh脚本 编辑:程序博客网 时间:2022/05/27 23:54
最基础的OpenCV是用C实现的,所以里面的各种抽象数据类型都是结构体。


1. 图像对象:IplImage


2. 读取图像:
IplImage* image = cvLoadImage("1.jpg", CV_LOAD_IMAGE_COLOR);

CV_LOAD_IMAGE_COLOR表示读入的是彩色图像,这是个默认参数,不显示指定也行。


3. 创建图像对象:
CvSize imgSize = cvSize(100, 100);
IplImage* newImage = cvCreateImage(imgSize, IPL_DEPTH_8U, 3);

CvSize是OpenCV中的数据类型,通常用来表示图像尺寸(宽度和高度);
IPL_DEPTH_8U 表示图像的数据类型是无符号8位整数(正好能表示0~255);
3 表示图像是彩色图,通道数为3(RGB)。灰度图的话该值为1。


4. 获取图像参数:
int imgWidth = image->width; // 图像宽度
int imgHeight = image->height; // 图像高度
int depth = image->depth; // 图像数据类型
int nChannels = image->nChannels; // 图像颜色通道数(灰度图为1,彩色图为3或者4)


5. 获取图像的像素数据
char* imgData = image->imageData; // 指向存储图像实际像素数据的内存指针
int x, y;
// x, y initialization
uchar R = CV_IMAGE_ELEM(image, uchar, y, nChannels * x);
uchar G = CV_IMAGE_ELEM(image, uchar, y, nChannels * x + 1);
ucahr B = CV_IMAGE_ELEM(image, uchar, y, nChannels * x + 2);

CV_IMAGE_ELEM是一个宏,用于获取图像中指定位置的数据。不过令人比较无语的是,OpenCV没有提供直接获取RGB值的方法,RGB三个值各自在内存中的位置需要程序员自己计算(最后一个参数)。
不过据说OpenCV后面扩展的C++接口提供了相应功能。。。


6. 创建窗口用于显示图像
cvNamedWindow("Display", CV_WINDOW_AUTOSIZE);
cvShowImage("Display", image);
cvWaitKey(0);
7. 读取视频并逐帧处理
CvCapture* capture = cvCreateFileCapture("1.avi");
IplImage* frame;

while(1){
    frame = cvQueryFrame(capture);

    // processing...
}

CvCapture是视频对象;
cvCreateFileCapture从指定的文件路径创建视频对象,暂时知道的支持格式有avimov
cvQueryFrame从视频对象中顺序读取一帧


下面是几个Image Processing的相关操作:
1. RGB转HSV:
cvCvtColor(src_im, dst_im, CV_BGR2HSV);

2. Image Resize:
cvResize(src_im, dst_im);

3. 腐蚀和膨胀(默认的模板是3*3的矩阵):
cvErode(src_im, dst_im);
cvDilate(src_im, dst_im);


0 0
原创粉丝点击