Python论坛  - 讨论区

标题:[python-chinese] 请教,如何用c++做一个wxImage处理模块给python

2007年11月01日 星期四 14:10

Jacky Ford witmud在gmail.com
星期四 十一月 1 14:10:13 HKT 2007

´ó¼ÒºÃ£¬Çë½ÌÒ»¸öÎÊÌ⣬
ÎÒÔÚ¿ª·¢Ò»¸öͼÏñ´¦ÀíÈí¼þ, Ô­À´ÔÚpythonÖд¦ÀíͼÏñ£¬ÐèÒª¶ÔͼÏñµÄÿһ¸öÏñËصÄRGB½øÐд¦Àí

import wx
...
img = wx.Image(path, wx.BITMAP_TYPE_ANY)
img2 = fixcolor£¨img) #ÕâÊÇÎÒ×öµÄͼÏñ´¦Àíº¯Êý
...
...
def fixcolor(img):
  data=img.GetData()
  ...
  #¶Ôdata½øÐд¦Àí
...

µ«ÊÇ´óͼƬËٶȴ¦ÀíÌ«Âý£¬600ÍòÏñËØÐèÒª107Ã룬ʹÓÃpsycoÖ®ºóÌá¸ßµ½27Ã룬½á¹¹ÓÅ»¯Ö®ºóÊÇ25Ã룬»¹ÊÇÎÞ·¨ÈÌÊÜ¡£
numpy¸ÄÔìºóËٶȷ´¶ø½µµ½60ÃëÁË£¬numpy.array´¦Àí¿ìЩ£¬µ«ÊÇ°Ñdata(sequence)ת³Énumpy.arrayËÙ¶ÈÌ«Âý¡£
ÓÃc++×ö²âÊÔ£¬Í¬µÈ¹¤×÷´ó¸ÅÖ»ÓÃ1Ãë¡£ÎÞÓï...

Ö»ºÃÓÃc++À´×ö£¬ÎÊÌâÊÇÈçºÎ°ÑwxImage¶ÔÏóimg´«µÝ¸øc++×öµÄÄ£¿éÄØ£¬È»ºó´¦ÀíÍêÒÔºóÔÙ´«»ØÀ´£¿

ÍøÉÏ¿ÉÒÔ¿´µ½Ò»°ãµÄ¶ÔÏóµÄ´«µÝ½Ì³Ì£¬²»¹ý¶ÔÓÚwx¶ÔÏó²»ÊǺÜÓаÑÎÕ¡£
ÊÇ´«µÝimg¶ÔÏó(Ö¸Õ룩£¬»¹ÊÇ´«µÝdataÕâ¸ö¶ÔÏó£¨sequence)ÄØ£¿

Ï£ÍûµÄ½á¹ûÊÇ£º
import fix
img=wx.Image(path, wx.BITMAP_TYPE_ANY)
img2=fix.fixcolor(img)       # »òÕß img2=fix.fixcolor(img.GetData()) Äĸö·½·¨¸üºÃÄØ£¿

Çë¸÷λ¸ßÊÖÖ¸µãÃÔ½ò£¬²»Ê¤¸Ð¼¤£¬¸Ð¼¤ÌéÁã...
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20071101/7f742198/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年11月01日 星期四 16:01

Alec huanghao.c在gmail.com
星期四 十一月 1 16:01:23 HKT 2007

最简单的是将Python对象实例转换
成 Dict(如果你仅需访问该实例中的某些属性的话),
再传给你的 Cxx 函数,

# python
class Image:
x = 1
y = 2
# class
result = cfunc({"x" : image_inst.x, "y" : image_inst.y})

# for Cxx
PyObject* cfunc(PyObject* image_dict) {
if (!PyDict_Check(image_dict)) {
return(NULL);
}
PyObject *key, *value;
int index = 0;
while (PyDict_Next(image_dict, &index;, &key;, &value;)) {
// ....
}
PyObject* result = PyDict_New();
if (!PyDict_Check(result)) {
return(NULL);
}
// ............
return(result);
}


Jacky Ford 写道:
> 大家好,请教一个问题,
> 我在开发一个图像处理软件, 原来在python中处理图像,需要对图像的每一个像
> 素的RGB进行处理
> import wx
> ...
> img = wx.Image(path, wx.BITMAP_TYPE_ANY)
> img2 = fixcolor(img) #这是我做的图像处理函数
> ...
> ...
> def fixcolor(img):
> data=img.GetData()
> ...
> #对data进行处理
> ...
> 但是大图片速度处理太慢,600万像素需要107秒,使用psyco之后提高到27秒,
> 结构优化之后是25秒,还是无法忍受。
> numpy改造后速度反而降到60秒了,numpy.array处理快些,但是把data
> (sequence)转成numpy.array 速度太慢。
> 用c++做测试,同等工作大概只用1秒。无语...
> 只好用c++来做,问题是如何把wxImage对象img传递给c++做的模块呢,然后处理
> 完以后再传回来?
> 网上可以看到一般的对象的传递教程,不过对于wx对象不是很有把握。
> 是传递img对象(指针),还是传递data这个对象(sequence)呢?
> 希望的结果是:
> import fix
> img=wx.Image(path, wx.BITMAP_TYPE_ANY)
> img2=fix.fixcolor(img) # 或者 img2=fix.fixcolor(img.GetData()) 哪个方
> 法更好呢?
> 请各位高手指点迷津,不胜感激,感激涕零...
> ------------------------------------------------------------------------
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年11月01日 星期四 17:14

yuan xuan xuanyuan14.leo在gmail.com
星期四 十一月 1 17:14:09 HKT 2007

考虑过多线程处理没有

在07-11-1,Jacky Ford <witmud在gmail.com> 写道:
>
> 大家好,请教一个问题,
> 我在开发一个图像处理软件, 原来在python中处理图像,需要对图像的每一个像素的RGB进行处理
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
-------------- 下一部分 --------------
一个HTML附件被移除...
URL: http://python.cn/pipermail/python-chinese/attachments/20071101/a3d982e2/attachment.htm 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年11月04日 星期日 10:43

Jacky Ford witmud在gmail.com
星期日 十一月 4 10:43:51 HKT 2007

python/c apiËƺõÓеãÂé·³£¬ÄÜ·ñÔÚswig£¬boostÖ®¼äÍƼöһϡ£
¹Ø¼üÊÇ´« wxImageµÄÖ¸Õ룬»¹ÊÇwxImage.GetData()ºóµÄsequences.


On 11/1/07, Alec <huanghao.c在gmail.com> wrote:
>
> ×î¼òµ¥µÄÊǽ«Python¶ÔÏóʵÀýת»»
> ³É Dict(Èç¹ûÄã½öÐè·ÃÎʸÃʵÀýÖеÄijЩÊôÐԵĻ°£©,
> ÔÙ´«¸øÄãµÄ Cxx º¯Êý,
>
> # python
> class Image:
> x = 1
> y = 2
> # class
> result = cfunc({"x" : image_inst.x, "y" : image_inst.y})
>
> # for Cxx
> PyObject* cfunc(PyObject* image_dict) {
> if (!PyDict_Check(image_dict)) {
> return(NULL);
> }
> PyObject *key, *value;
> int index = 0;
> while (PyDict_Next(image_dict, &index;, &key;, &value;)) {
> // ....
> }
> PyObject* result = PyDict_New();
> if (!PyDict_Check(result)) {
> return(NULL);
> }
> // ............
> return(result);
> }
>
>
> Jacky Ford дµÀ:
> > ´ó¼ÒºÃ£¬Çë½ÌÒ»¸öÎÊÌ⣬
> > ÎÒÔÚ¿ª·¢Ò»¸öͼÏñ´¦ÀíÈí¼þ, Ô­À´ÔÚpythonÖд¦ÀíͼÏñ£¬ÐèÒª¶ÔͼÏñµÄÿһ¸öÏñ
> > ËصÄRGB½øÐд¦Àí
> > import wx
> > ...
> > img = wx.Image(path, wx.BITMAP_TYPE_ANY)
> > img2 = fixcolor£¨img) #ÕâÊÇÎÒ×öµÄͼÏñ´¦Àíº¯Êý
> > ...
> > ...
> > def fixcolor(img):
> > data=img.GetData()
> > ...
> > #¶Ôdata½øÐд¦Àí
> > ...
> > µ«ÊÇ´óͼƬËٶȴ¦ÀíÌ«Âý£¬600ÍòÏñËØÐèÒª107Ã룬ʹÓÃpsycoÖ®ºóÌá¸ßµ½27Ã룬
> > ½á¹¹ÓÅ»¯Ö®ºóÊÇ25Ã룬»¹ÊÇÎÞ·¨ÈÌÊÜ¡£
> > numpy¸ÄÔìºóËٶȷ´¶ø½µµ½60ÃëÁË£¬numpy.array´¦Àí¿ìЩ£¬µ«ÊÇ°Ñdata
> > (sequence)ת³Énumpy.array ËÙ¶ÈÌ«Âý¡£
> > ÓÃc++×ö²âÊÔ£¬Í¬µÈ¹¤×÷´ó¸ÅÖ»ÓÃ1Ãë¡£ÎÞÓï...
> > Ö»ºÃÓÃc++À´×ö£¬ÎÊÌâÊÇÈçºÎ°ÑwxImage¶ÔÏóimg´«µÝ¸øc++×öµÄÄ£¿éÄØ£¬È»ºó´¦Àí
> > ÍêÒÔºóÔÙ´«»ØÀ´£¿
> > ÍøÉÏ¿ÉÒÔ¿´µ½Ò»°ãµÄ¶ÔÏóµÄ´«µÝ½Ì³Ì£¬²»¹ý¶ÔÓÚwx¶ÔÏó²»ÊǺÜÓаÑÎÕ¡£
> > ÊÇ´«µÝimg¶ÔÏó(Ö¸Õ룩£¬»¹ÊÇ´«µÝdataÕâ¸ö¶ÔÏó£¨sequence)ÄØ£¿
> > Ï£ÍûµÄ½á¹ûÊÇ£º
> > import fix
> > img=wx.Image(path, wx.BITMAP_TYPE_ANY)
> > img2=fix.fixcolor(img) # »òÕß img2=fix.fixcolor(img.GetData()) Äĸö·½
> > ·¨¸üºÃÄØ£¿
> > Çë¸÷λ¸ßÊÖÖ¸µãÃÔ½ò£¬²»Ê¤¸Ð¼¤£¬¸Ð¼¤ÌéÁã...
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20071104/6ae0470d/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号