Opencv...获取 IPLImage 或 CvMat 中的数据
我正在用 python 中的 opencv 做一些简单的程序。我想自己编写一些算法,因此需要获取图像内的“原始”图像数据。例如,我不能只执行 image[i,j],我怎样才能获得数字?
谢谢
I am doing some simple programs with opencv in python. I want to write a few algorithms myself, so need to get at the 'raw' image data inside an image. I can't just do image[i,j] for example, how can I get at the numbers?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用
LoadImageM
将图像文件直接加载到cvmat
中的快速示例:输出:
快速示例展示如何按
0.5
多个一个或多个颜色通道>:Quick example of using
LoadImageM
to load an image file directly into acvmat
:Output:
Quick example showing how to multiple one or more color channels by
0.5
:CvMat 和 IplImage 都提供了 tostring 方法,该方法返回表示原始数据的字符串。使用图像数据,您可以弄清楚如何将字符串数据解释为矩阵。
您应该能够使用
fromarray
将数据字符串转换回图像对象。要将字符串转换为数组,请考虑使用
array
Python 中的模块。例如:要获取像素之间的“步幅”,请使用:
然后使用典型的数组索引来获取各个像素。您可能希望将所有这些包装在一个隐藏所有令人讨厌的复杂性的类中。
Both CvMat and IplImage provide
tostring
methods that return a string representing the raw data. Using the image data, you can figure out how to interpret the string data as a matrix.You should be able to use
fromarray
to convert the data string back into an image object.To convert the string to an array, consider using the
array
module in Python. For instance:To get the 'stride' between pixels, use:
Then typical array indexing to get individual pixels. You would probably want to wrap all this up in a class that hides all the nasty complexity.
我不知道 opencv python 绑定,但在 C 或 C++ 中,您必须获取存储在 IplImage 中的缓冲区指针。该缓冲区根据图像格式进行编码(也存储在 IplImage 中)。对于 RGB,有一个字节表示 R、一个字节表示 G、一个字节表示 B,依此类推。
查看Python绑定的API,你会发现如何访问缓冲区,然后你可以获取像素信息。
我的2c
I do not know opencv python bindings, but in C or C++ you have to get the buffer pointer stored in IplImage. This buffer is coded according to the image format (also stored in IplImage). For RGB you have a byte for R, a byte for G, a byte for B, and so on.
Look at the API of python bindings,you will find how to access the buffer and then you can get to pixel info.
my2c