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


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

      在上次成功的基础上,这次我打算通过C#调用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:pythonOnherepython.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;
                }
            }     

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

  • 相关阅读:
    vue 零散记录
    flex布局-弹性布局
    apply 和 call 的用法
    git版本控制系统重新认识
    Windows驱动过滤--kdbclass过滤,寒江独钓加强版
    Socket的select制作多客户端传输(Qt)
    基于g_soap制作的数据下载器,传输速度只有600kb 需改进
    lua中获取数组长度问题
    MySQL存储过程详解 mysql 存储过程(转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html)
    lua接受C++返回值
  • 原文地址:https://www.cnblogs.com/yuan1120/p/11417064.html
Copyright © 2020-2023  润新知