小编Ale*_*tke的帖子

在MayaVi中保存多个图像

我想渲染大约500个图像并将它们保存到不同的png文件中,因此我写了一个包含我的数据集和渲染函数的小类

from mayavi import mlab
mlab.options.offscreen=True

class Dataset(object):
    def __init__(self):
        some init stuff etc

                 .
                 .
                 .
                 .

    def save_current_frame_to_png(self, filename):
        mlab.contour3d(self.frame_data, contours =30, opacity=0.2) 
        mlab.savefig(filename)
        mlab.clf()
        mlab.close()
        gc.collect()

    def create_movie_files(self):
        folder_name = "animation"
        try:
            os.makedirs(folder_name)
        except OSError:
            raise OSError("Directory already exists.")

        self.__go_to_first_frame()

        for i in range(self.frames):
            filename = "".join([folder_name, "/%.5i" % i, ".png"])
            print filename
            self.save_current_frame_to_png(filename)
            self.read_single_frame()

        self.__go_to_first_frame()
Run Code Online (Sandbox Code Playgroud)

所以一切似乎都运行良好,但我看看内存使用情况,直到系统崩溃.所以我试图使用mlab.clf()gc.collect()保持我的记忆低,这是行不通的.我发现一个解决方案mlab.close()似乎适用于内存使用,但这带来了一个新问题.每次渲染新图像时,mayavi都会创建一个新窗口,因此在大约200个窗口之后程序崩溃.也许是否有可能完全禁用Windows?在我看来,mlab.options.offscreen=True只禁用当前窗口内的绘图.

编辑: self.frame_data是一个numpy形状的数组(100,100,100),self.read_single_frame()只是从文本文件中读取下一帧并存储它self.frame_data.这个函数不会增加内存,如果我关闭渲染内存使用率保持在1.2%.

python mayavi

10
推荐指数
1
解决办法
955
查看次数

COM:excelApplication.Application.Quit()保留了该进程

我正在使用COM集成从Python 2.7驱动MS Excel.我注意到一个奇怪的事情:当我运行以下代码时:

import win32com.client
excelApp = win32com.client.dynamic.Dispatch('Excel.Application')
Run Code Online (Sandbox Code Playgroud)

EXCEL.EXE过程中出现的过程列表(视图中使用Windows任务管理器或上subprocess.Popen('tasklist'))按预期方式.然后我做了我需要做的所有事情没有问题.但是,当我关闭Excel时:

excelApp.Application.Quit()
Run Code Online (Sandbox Code Playgroud)

即使我关闭启动它的Python解释器,这个过程仍然存在(这种情况很有意义,因为Excel在不同的进程中运行但只是为了确定).我发现终止此过程的唯一方法是手动,使用任务管理器,或通过调用:

subprocess.Popen("taskkill /F /im EXCEL.EXE",shell=True)
Run Code Online (Sandbox Code Playgroud)

强制/F标志是必要的,否则进程不会终止.

这不是一个真正的问题(我希望),但我想问一下,当我第一次"正常"编辑文档时,这是否会导致问题,然后从python调用Excel然后再"正常"?可能连续多次(几十次)?我担心的是创建冲突版本的文档等.或者我应该EXCEL.EXE每次只是为了安全而终止该过程?

另外我注意到,subprocess.Popen("taskkill")不会返回任何我可以catch和任何异常的例外(或者我在这里做些什么?).我特别感兴趣的是区分"不存在的进程"杀死尝试和终止进程失败的尝试.

python com excel vba excel-vba python-2.7

6
推荐指数
1
解决办法
3069
查看次数

OpenCV:solvePnP tvec单位和轴方向

我试图找到相机相对于棋盘的相对位置(或者相反的方向) - 我觉得在不同的坐标系之间进行转换是合适的,例如这里建议的.我决定在这个阶段使用棋盘不仅用于校准而且还用于实际位置确定,因为我可以使用它findChessboardCorners来获得imagePoints(并且这可以正常工作).

我已经阅读了很多关于这个主题的内容,并且觉得我理解了solvePnP输出(即使我是openCV一般的新手和计算机视觉).不幸的是,我得到的结果solvePnP和物理测量测试设置的结果是不同的:z方向的平移偏差大约.25%.x并且y方向是完全错误的 - 几个数量级和不同的方向比我读到的相机坐标系统(x指向图像,y向右,z远离相机).所不同的坚持,如果我转换tvec,并rvec以相机姿态在世界坐标.

我的问题是:

  • 相机和世界坐标系轴的方向是什么?
  • 是否solvePnP以我指定的相同单位输出翻译objectPoints
  • 我将世界原点指定为objectPoints(棋盘角落之一)中的第一个.这样可以tvec从摄像机坐标转换到那个点吗?

这是我的代码(我附加备考,因为它不会抛出任何异常等).我使用灰度图像来获取校准期间的相机内在矩阵和失真系数,因此决定以灰度级执行本地化.chessCoordinates是一个棋盘点位置列表,以mm为单位,相对于原点(角点之一).camMatrixdistCoefficients来自校准(使用相同的棋盘和执行objectPoints).

camCapture=cv2.VideoCapture(0) # Take a picture of the target to get the imagePoints 
tempImg=camCapture.read()
imgPts=[]
tgtPts=[]

tempImg=cv2.cvtColor(tempImg[1], cv2.COLOR_BGR2GRAY)
found_all, corners = cv2.findChessboardCorners(tempImg, chessboardDim )

imgPts.append(corners.reshape(-1, 2))
tgtPts.append(np.array(chessCoordinates, dtype=np.float32))

retval,myRvec,myTvec=cv2.solvePnP(objectPoints=np.array(tgtPts), imagePoints=np.array(imgPts), cameraMatrix=camMatrix, distCoeffs=distCoefficients)
Run Code Online (Sandbox Code Playgroud)

python opencv coordinate-systems camera-calibration

5
推荐指数
1
解决办法
9288
查看次数

Visual Python工作得非常慢

我想visual用于我的项目.我之前已经多次使用它了,一切都很好,但我最近改变了工作,所以我在以前从未使用过的机器上使用它

问题有些奇怪:当我从/visual/examples一切运行其中一个示例脚本时就好了.但是当我尝试运行一个非常简单的脚本时:

import visual
visual.sphere(pos=[0.,0.,0.],radius=1.,color=visual.color.red)
Run Code Online (Sandbox Code Playgroud)

执行需要几分钟.对于我想要使用它的项目来说,这是完全不可接受的.

我已经尝试从命令行和IPython运行这种脚本,但行为是相同的:出现一个可视窗口,Windows将窗口标记为"没有响应",然后,经过一段痛苦的长时间后,整个场景显示为预期.

这显然不是我用来调用什么IDE的问题,visual而且我对如何解决这个问题非常无能为力.如果这是重要的,我使用64位Windows(也下载64b visual)和Anaconda附带的Python发行版.

一个有趣的观察:我运行脚本的Python解释器并不忙,即我可以在视觉场景无法正确显示时执行其他命令.

任何有关如何尝试解决此问题的帮助甚至想法都将非常感激.

python vpython python-2.7

5
推荐指数
1
解决办法
2075
查看次数

Python 2.7 - 续分数扩展 - 理解错误

我编写了这段代码来计算使用欧几里德算法的有理数N的连续分数展开:

from __future__ import division

def contFract(N):
    while True:
        yield N//1
        f = N - (N//1)
        if f == 0:
            break
        N = 1/f
Run Code Online (Sandbox Code Playgroud)

如果说N是3.245,则函数永远不会结束,因为显然f永远不等于0.扩展的前10个术语是:

[3.0,4.0,12.0,3.0,1.0,247777268231.0,4.0,1.0,2.0,1.0]

这显然是一个错误,因为实际扩展只是:

[3; 4,12,3,1]或[3; 4,12,4]

是什么原因引起了这个问题?这是某种舍入错误吗?

python division integer-division fractions continued-fractions

5
推荐指数
1
解决办法
405
查看次数

C++:解析带有括号的数字字符串

这似乎微不足道,但我似乎无法解决这个问题.我有格式的STL字符串2013 336 (02 DEC) 04(04小时在哪里,但这是无关紧要的).我想提取月份的日期(02在示例中)和月份以及小时.

我试图干净利落地避免例如在括号中拆分字符串,然后使用子字符串等.理想情况下,我想使用a stringstream并将其重定向到变量.我现在得到的代码是:

int year, dayOfYear, day;
std::string month, leftParenthesis, rightParenthesis;
std::string ExampleString = "2013 336 (02 DEC) 04";

std::istringstream yearDayMonthHourStringStream( ExampleString );
yearDayMonthHourStringStream >> year >> dayOfYear >> leftParenthesis >> day >> month >> rightParenthesis >> hour;
Run Code Online (Sandbox Code Playgroud)

它提取year并且dayOfYear好了2013,336但事情开始变得糟糕.day0,month和空字符串,和hour843076624.

leftParenthesis(02这样它包含day但当我尝试省略leftParenthesis变量时,重定向yearDayMonthHourStringStreamday也是0. …

c++ stringstream c++11

3
推荐指数
1
解决办法
1450
查看次数