您的位置:首页 > 编程语言 > Python开发

python,opencv切割图像操作

2014-06-23 19:14 489 查看
 1.python中切片操作

    在Python中,切片操作使我们取数据方便了很多,先解释一下Python的切片操作:切片操作包含三个参数[x:y:z],其中,x表示切片的起始位置,为空则表示从字符串的起始位置开始;y表示切片的结束为止,为空则表示字符串的末位(最后一个字符结束的位置)。z表示步长,即切片时指针移动的距离,默认值为1,如果设z为2,则会每间隔一个字符取一次,以此类推。

       image=img[起点:终点,起点:终点]

       其中,img为待切割图像,方括号内为要切割的图片块坐标;image为切割后图像。

        举例其它用法:

       首先我们声明一个字符串s='abcde',跟其他语言比较相似,字符串s中'a'所对应的下标为0,'b'对应的下标为1,'e'对应的则是4.反过来,'e'对应的下标也是-1,'d'对应的下标为-2,以此类推。

[python] view
plaincopyprint?

>>> s = 'abcde'  

操作一:取字符串'ab'    

[python] view
plaincopyprint?

>>> s[0:2]  

'ab'  

或者:

[python] view
plaincopyprint?

>>> s[:2]  

'ab'  

反过来取:

[python] view
plaincopyprint?

>>> s[-5:-3]  

'ab'  

或者:

[python] view
plaincopyprint?

>>> s[:-3]  

'ab'  

操作二:取整个字符串'abcde'

[python] view
plaincopyprint?

>>> s  

'abcde'  

或者:

[python] view
plaincopyprint?

>>> s[:]  

'abcde'  

操作三:间隔取字符串'ace'

[python] view
plaincopyprint?

>>> s[::2]  

'ace'  

操作四:反向取'edcba'

[python] view
plaincopyprint?

>>> s[::-1]  

'edcba'  

操作五:取单个字符

[python] view
plaincopyprint?

>>> s[0]  

'a'  

>>> s[3]  

'd'  

虽然先前知道ROI区域是感兴趣区域,但是真正看到调用了OpenCV的cvSetImageROI函数时,并不知道它的作用,所以还是单独写了一段代码对这个函数进行探究。

2.OpenCV中cv.SetImageROI函数的介绍如下:

void cvSetImageROI( IplImage* image, CvRect rect );

image 

图像. 

rect 

ROI 矩形. 

函数 cvSetImageROI 基于给定的矩形设置图像的 ROI(感兴趣区域) . 如果ROI是NULL 并且参数RECT的值不等于整个图像, ROI被分配. 不像 COI, 大多数的 OpenCV 函数支持 ROI 并且处理它就像它是一个分离的图像 (例如, 所有的像素坐标从ROI的左上角或左下角(基于图像的结构)计算。 

测试代码:

[cpp] view
plaincopy

#include<cv.h>  

#include<cxcore.h>  

#include<highgui.h>  

void main()  

{  

    IplImage *res,*dst;  

    CvRect rect;  

    rect.x=130,rect.y=30,rect.width=200,rect.height=200;  

    res=cvLoadImage("C:/Users/lufee/Pictures/cat.jpg");//载入一张图片  

    dst=cvCreateImage(cvSize(200,200),8,3);//创建图像空间  

  

    //创建窗口  

    cvNamedWindow("res",CV_WINDOW_AUTOSIZE);  

    cvNamedWindow("dst",CV_WINDOW_AUTOSIZE);  

  

    //设置ROI区域  

    cvSetImageROI(res,rect);  

  

    //提取ROI  

    cvCopy(res,dst);  

  

    //取消设置  

    cvResetImageROI(res);  

  

    //显示图像  

    cvShowImage("res",res);  

    cvShowImage("dst",dst);  

    cvWaitKey(0);  

  

    cvDestroyWindow("res");  

    cvDestroyWindow("dst");  

  

    cvReleaseImage(&res);  

    cvReleaseImage(&dst);  

  

  

  

}  

运行结果(res为原图,dst为提取的ROI区域):



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: