Действительно, Сципи борется с комплексными числами. Тем не менее, проект под названием mpmath может решить вашу проблему. Здесь: http://mpmath.org/ . Раньше шел с sympy (sympy.org). Вы можете найти документацию здесь : Это решение работает для меня:
from mpmath import findroot
import numpy as np
import scipy.io as spio
params = dict()
params['cbeta'] = 0.96
params['cdelta'] = 0.1
params['calpha'] = 0.33
params['cgamma'] = 1.2
params['clambda']= 1.0
params['csigma'] = 0.8
params['etau'] = 0.0
def steady_s(c,y,k,g,r):
# unpacking paramters
cbeta = params['cbeta']
cdelta = params['cdelta']
calpha = params['calpha']
cgamma = params['cgamma']
clambda= params['clambda']
csigma = params['csigma']
# guesses for initial values
#c = vars0[0]
#y = vars0[1]
#k = vars0[2]
#g = vars0[3]
#r = vars0[4]
# == functions to minimize to find steady states == #
f = [0,0,0,0,0]
# HH Euler
f[0] = (1.0/c)*cbeta*(r + 1.0 - cdelta) - (1.0+g)/c
# Goods market clearing
f[1] = y - c - k*(1.0 + g) + k*(1.0-cdelta)
# Capital Market clearing
f[2] = r - (k)**(calpha-1.0)*calpha**2.0
# production function for final good
f[3] = y - k**calpha
# growth rate
pi = (calpha - 1.0) * k**calpha #small pi, this isnt actual profits
f[4] = g - (cgamma - 1.0) * clambda * (csigma*clambda*pi)**(csigma/(1.0-csigma))
return f
# == Initial Guesses == #
vars0 = list(np.ones((5,)))
# == Solving for Steady State == #
xss = findroot(steady_s, vars0)
Моя ставка - это, cvCreateVideoWriter возвращает ПУСТОЙ УКАЗАТЕЛЬ. Просто шаг через него, чтобы видеть, верно ли это. В этом случае проблема, вероятно, с CV_FOURCC (..) который не находит кодек и вызывает возврат 0;
можно попытаться использовать-1 вместо CV_FOURCC. Собирается быть подсказка во время времени выполнения для Вас к, выбрал соответствующий кодек
Возможно, Вы могли попытаться вставить printf ("Структурируют found\n") в для (; ;) чтобы видеть, получает ли это на самом деле кадры. Или еще лучше:
if(colourImage == NULL) {
printf("Warning - got NULL colourImage\n");
continue;
}
cvNamedWindow( "test", 1);
cvShowImage( "test", colourImage );
cvWaitKey( 0 );
cvDestroyWindow( "test" );
Затем посмотрите, получаете ли Вы какие-либо окна, и если они содержат правильное содержание.
Когда я гуглю эту проблему, я выполняю ответ: "OpenCV на Mac OS X не поддерживают запись avi, пока она не будет скомпилирована с ffmpeg"
Поскольку меня кажутся wrok этим решением http://article.gmane.org/gmane.comp.lib.opencv/16005
Необходимо предоставить полный путь файлу с фильмом в cvCreateVideoWriter. Я не знаю, является ли это только проблемой порта Mac OS X, но могло бы быть, так как QTNewDataReferenceFromFullPathCFString от спокойного бэкенда используется.
эй Этот код работает на DevC ++, попробуйте:
#include<cv.h>
#include<highgui.h>
#include<cvaux.h>
#include<cvcam.h>
#include<cxcore.h>
int main()
{
CvVideoWriter *writer = 0;
int isColor = 1;
int fps = 5; // or 30
int frameW = 1600; //640; // 744 for firewire cameras
int frameH = 1200; //480; // 480 for firewire cameras
//writer=cvCreateVideoWriter("out.avi",CV_FOURCC('P','I','M','1'),
// fps,cvSize(frameW,frameH),isColor);
writer=cvCreateVideoWriter("out.avi",-1,
fps,cvSize(frameW,frameH),isColor);
IplImage* img = 0;
img=cvLoadImage("CapturedFrame_0.jpg");
cvWriteFrame(writer,img); // add the frame to the file
img=cvLoadImage("CapturedFrame_1.jpg");
cvWriteFrame(writer,img);
img=cvLoadImage("CapturedFrame_2.jpg");
cvWriteFrame(writer,img);
img=cvLoadImage("CapturedFrame_3.jpg");
cvWriteFrame(writer,img);
img=cvLoadImage("CapturedFrame_4.jpg");
cvWriteFrame(writer,img);
img=cvLoadImage("CapturedFrame_5.jpg");
cvWriteFrame(writer,img);
cvReleaseVideoWriter(&writer);
return 0;
}
Я скомпилировал его и запустил, работает нормально. (Я не видел выше, получили ли вы свой ответ или нет ... но над этой конкретной вещью я очень много работал раньше, и внезапно я просто сделал это из некоторых фрагментов кода.)
Этот код работал нормально:
cv.h
highgui.h
cvaux.h
cvcam.h
cxcore.h
int main(){
CvVideoWriter *writer = 0;
int isColor = 1;
int fps = 5; // or 30
IplImage* img = 0;
img=cvLoadImage("animTest_1.bmp");
int frameW = img->width; //640; // 744 for firewire cameras
int frameH = img->height; //480; // 480 for firewire cameras
writer=cvCreateVideoWriter("out.avi",-1,
fps,cvSize(frameW,frameH),1);
cvWriteFrame(writer, img); // add the frame to the file
char *FirstFile,fF[20]="",*fileNoStr,fns[4]="";
fileNoStr=fns;
for(int fileNo;fileNo<100;fileNo++){
FirstFile=fF;
itoa(fileNo,fileNoStr,10);
FirstFile=strcat ( FirstFile,"animTest_");
FirstFile=strcat ( FirstFile,fileNoStr);
FirstFile=strcat ( FirstFile,".bmp");
printf(" \n%s .",FirstFile);
img=cvLoadImage(FirstFile);
cvWriteFrame(writer, img);
}
cvReleaseVideoWriter(&writer);
return 0;
}
Думаю, проблема в том, что ваш цикл for никогда не заканчивается; следовательно, cvReleaseVideoWriter (& writer);
и cvReleaseCapture (& input);
никогда не вызываются. Попробуйте что-нибудь вроде for (int i = 0; i <200; i ++)
и посмотрите, получится ли у вас рабочее видео.
Часто видео записывается во временные файлы перед финализацией на диске. Если ваш файл не доработан, смотреть будет не на что.
Надеюсь, что это поможет.