python,opencv切割图像操作

来源:互联网 发布:中国白银集团淘宝店 编辑:程序博客网 时间:2024/05/21 06:50

 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?
  1. >>> s = 'abcde'  



操作一:取字符串'ab'    

[python] view plaincopyprint?
  1. >>> s[0:2]  
  2. 'ab'  
或者:

[python] view plaincopyprint?
  1. >>> s[:2]  
  2. 'ab'  
反过来取:

[python] view plaincopyprint?
  1. >>> s[-5:-3]  
  2. 'ab'  
或者:

[python] view plaincopyprint?
  1. >>> s[:-3]  
  2. 'ab'  



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

[python] view plaincopyprint?
  1. >>> s  
  2. 'abcde'  
或者:

[python] view plaincopyprint?
  1. >>> s[:]  
  2. 'abcde'  


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

[python] view plaincopyprint?
  1. >>> s[::2]  
  2. 'ace'  


操作四:反向取'edcba'

[python] view plaincopyprint?
  1. >>> s[::-1]  
  2. 'edcba'  


操作五:取单个字符

[python] view plaincopyprint?
  1. >>> s[0]  
  2. 'a'  
  3. >>> s[3]  
  4. '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
  1. #include<cv.h>  
  2. #include<cxcore.h>  
  3. #include<highgui.h>  
  4. void main()  
  5. {  
  6.     IplImage *res,*dst;  
  7.     CvRect rect;  
  8.     rect.x=130,rect.y=30,rect.width=200,rect.height=200;  
  9.     res=cvLoadImage("C:/Users/lufee/Pictures/cat.jpg");//载入一张图片  
  10.     dst=cvCreateImage(cvSize(200,200),8,3);//创建图像空间  
  11.   
  12.     //创建窗口  
  13.     cvNamedWindow("res",CV_WINDOW_AUTOSIZE);  
  14.     cvNamedWindow("dst",CV_WINDOW_AUTOSIZE);  
  15.   
  16.     //设置ROI区域  
  17.     cvSetImageROI(res,rect);  
  18.   
  19.     //提取ROI  
  20.     cvCopy(res,dst);  
  21.   
  22.     //取消设置  
  23.     cvResetImageROI(res);  
  24.   
  25.     //显示图像  
  26.     cvShowImage("res",res);  
  27.     cvShowImage("dst",dst);  
  28.     cvWaitKey(0);  
  29.   
  30.     cvDestroyWindow("res");  
  31.     cvDestroyWindow("dst");  
  32.   
  33.     cvReleaseImage(&res);  
  34.     cvReleaseImage(&dst);  
  35.   
  36.   
  37.   
  38. }  


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

0 0
原创粉丝点击