繁体   English   中英

在python openCV中查找图像类型

[英]Find image type in python openCV

我最近遇到了一些问题,找到了我用于模式匹配目的的模板图像的类型。 我使用的是OpenCV的python版本, imread返回的图像似乎没有像C ++ OpenCV实现中那样的“type”属性。

我想访问模板的类型来创建具有相同大小和模板类型的“dst” Mat

这是代码:

template = cv2.imread('path-to-file', 1)
height, width = template.shape[:-1]
dst = cv2.cv.CreateMat(width,height, template.type) 
--->'Error :numpy.ndarray' object has no attribute 'type'

你对这个问题有什么看法吗?

非常感谢你的回答。

虽然可以使用template.dtype访问numpy数组类型,但这不是您要传递给cv2.cv.CreateMat() ,例如

In [41]: cv2.imread('abalone.jpg', cv2.IMREAD_COLOR).dtype         
Out[41]: dtype('uint8')

In [42]: cv2.imread('abalone.jpg', cv2.IMREAD_GRAYSCALE).dtype
Out[42]: dtype('uint8')

如果你通过了numpy的阵列的dtypecv2.cv.CreateMat()您将收到此错误,例如,

cv2.cv.CreateMat(500, 500, template.dtype)

TypeError:需要一个整数

正如您所看到的,dtype不会因灰度/颜色而改变

In [43]: cv2.imread('abalone.jpg', cv2.IMREAD_GRAYSCALE).shape
Out[43]: (250, 250)

In [44]: cv2.imread('abalone.jpg', cv2.IMREAD_COLOR).shape
Out[44]: (250, 250, 3)

在这里你可以看到img.shape对你更有用。

从模板创建一个numpy矩阵

因此,您希望从模板中创建一个对象:

import numpy as np
dst = np.zeros(template.shape, dtype=template.dtype)

就Python API而言,这应该是可用的。

cv2.cv.CreateMat

如果你想使用C ++创建矩阵的方式,你应该记住你打开模板的类型:

template = cv2.imread('path-to-file', 1) # 1 means cv2.IMREAD_COLOR 
height, width = template.shape[:-1]    
dst = cv2.cv.CreateMat(height, width, cv2.IMREAD_COLOR)

如果你坚持猜测类型:虽然它不完美,你可以通过读取矩阵的尺寸长度来猜测, IMREAD_COLOR类型的图像有3个维度,而IMREAD_GRAYSCALE有2个维度

In [58]: len(cv2.imread('abalone.jpg', cv2.IMREAD_COLOR).shape)
Out[58]: 3

In [59]: len(cv2.imread('abalone.jpg', cv2.IMREAD_GRAYSCALE).shape)
Out[59]: 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM