【问题标题】:opencv using python - copy roi to new smaller image使用python的opencv - 将roi复制到新的较小图像
【发布时间】:2014-09-09 21:08:36
【问题描述】:

在opencv中使用python - 如何创建一个新图像,它只是另一个图像的 roi 副本? 当然有一些类似

的东西
Mat roi = img( Rect(x,y,w,h) );

对于python,或者比蛮力更优雅的东西

rect=[x,y,w,h]
img = cv2.imread(subst)
roi= np.zeros((rect[3],rect[2],3),np.uint8)  #is this really reversed? who ordered that?
cv2.rectangle(img,(x,y),(w+x,h+y),[255,0,0],thickness=1)
cv2.imshow('img',img)
cv2.waitKey()
#cv.Copy(cv.fromarray(img),cv.fromarray(roi),cv.fromarray(mask))  #can't make it work...
for x in range(rect[2]):
    for y in range(rect[3]):
        roi[y,x,:]=img[y+rect[1],x+rect[0],:]

顺便说一句,x,y 坐标如何排序 - 是 [x,y,c] 还是 [y,x,c] 指定 x(水平)和 y(垂直)处的点?它看起来像它的 [y,x,c], iiuc,而 cv2.rectangle 是 (x,y) 而 img.shape 是 (y,x) 比 (g,r,b) 更烦人(r,g,b)....

【问题讨论】:

  • 顺便说一句,您上面的 C++ 实际上并没有复制。也许你的意思是Mat roi = img(Rect(x, y, w, h)).clone();
  • 你试过Mat roi = image[x : y, x + w : y + h]吗?

标签: python opencv


【解决方案1】:
import os
import cv2

img = cv2.imread(filename)
roi = img[row:row+height,column:column+width]
cv2.imshow('ROI',roi)
cv2.waitKey(0)

【讨论】:

  • 假设图像是灰度的。如果我们有颜色,您可能应该为第三维添加另一个访问器(即roi = img[x:x+w, y:y+h, :]
  • 它适用于我在 Python 2.7.6 中使用或不使用附加访问器的彩色图像。
  • 奇怪...我收到一个错误。是时候更新我的发行版了。感谢您的留言!
  • 仍然,应该是:img[y:y+h, x:x+w](这是一个普通的 numpy roi,顺便说一句)
  • @berak,你说得对,我已经编辑了我的答案以澄清和纠正。
猜你喜欢
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2012-12-13
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多