欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PIE调用Python返回得到直方图矩阵数组

程序员文章站 2022-07-20 10:14:29
前段时间我研究了PIE SDK与Python的结合,已经能成功的通过C#调用Python,获得彩色直方图。(上一篇随笔中有分享:https://www.cnblogs.com/yuan1120/p/11126869.html ) 在上次成功的基础上,这次我打算通过C#调用Python,返回得到直方图 ......

  前段时间我研究了pie sdk与python的结合,已经能成功的通过c#调用python,获得彩色直方图。(上一篇随笔中有分享:https://www.cnblogs.com/yuan1120/p/11126869.html )

  在上次成功的基础上,这次我打算通过c#调用python,返回得到直方图矩阵的数组,方便用于各种特征值的计算。

结果如下图所示:

  先打开一张栅格图片

PIE调用Python返回得到直方图矩阵数组

 

PIE调用Python返回得到直方图矩阵数组

  开发环境:vs2013 framework4、 python 3.7

通过python中的这三个模块 pil、numpy、matplotlib可以得到直方图矩阵数组,python代码如下:

 1 # -*- coding: utf-8 -*-
 2 import sys
 3 from pil import image
 4 from pil import imagedraw
 5 import numpy as np
 6 import matplotlib.pyplot as plt
 7 
 8 #索引传入图片地址
 9 aaa=sys.argv[1]
10 im = image.open(aaa)
11 r,g,b=im.split()
12 
13 width, height = im.size
14 rpix = r.load()
15 gpix = g.load()
16 bpix = b.load()
17 his1 = [0]*768
18 for aw in range(width):
19     for ah in range(height):
20         p_r = rpix[aw,ah]
21         p_g = gpix[aw,ah]+256
22         p_b = bpix[aw,ah]+512
23         his1[p_r] = his1[p_r]+1
24         his1[p_g] = his1[p_g]+1
25         his1[p_b] = his1[p_b]+1
26 
27 a=[str(i) for i in his1]
28 b=' '.join(a)    
29 #以字符串形式返回
30 print(b)

c#代码如下:

  注意添加引用system.threading.tasks

 1             private void 外部调用toolstripmenuitem_click(object sender, eventargs e)
 2              {
 3                 //启动一个进程
 4                system.diagnostics.process p = new system.diagnostics.process();
 5                p.exited += p_exited;
 6 
 7                p.startinfo.useshellexecute = false;
 8                p.startinfo.redirectstandardoutput = true;//重定向输出
 9                p.startinfo.redirectstandarderror = true;
10                //启动python.exe
11                p.startinfo.filename = @"g:\pythononhere\python.exe";//自己安装python.exe的路径
12                p.startinfo.createnowindow = true;            
13   
14                string m_inputfile1 = m_inputfile.replace(@"\", "/");//已经打开的栅格文件路径,由于python识别的路径格式和c#有一点区别,注意转换格式
15                p.startinfo.arguments = @"e:\pie开发\7.py" + " " + m_inputfile1; //构造参数,将算法文件(.py)和算法参数一并传入,以空格间隔
16                p.enableraisingevents = true;
17                p.start();
18    
19                //注意,如果想从python中返回获取字符串,一定要加入下面三句
20                p.beginoutputreadline();
21                p.outputdatareceived += new datareceivedeventhandler(p_outputdatareceived);
22                p.waitforexit();
23              }    

  进程退出时,启动

        private void p_exited(object sender, eventargs e)
        {
            system.diagnostics.process p = sender as system.diagnostics.process;
            messagebox.show(histo);
         }   

        //输出打印的信息
        private void p_outputdatareceived(object sender, datareceivedeventargs e)
        {
            if (!string.isnullorempty(e.data))
            {
                histo = e.data + environment.newline;
            }
        }     

  有帮助的话,记得点个赞支持一下哦~
  也欢迎各位评论,指点,交流