C++Guns – RoboBlog blogging the bot

29.01.2011

Terminal reparieren

Filed under: Allgemein — Thomas @ 16:01

Auch wieder geklaut aber für mich wichtig

https://ssl.buetow.org/comp/2010/03/terminal-broken.html
kaputt

Einfach blind "tput reset" eintippen, enter, done.

Gelöschte Dateien aus dem Proc-FS holen

Filed under: Allgemein — Tags: — Thomas @ 16:01

Zufällig auf einem anderen Blog was gefunden. Da ich das aber als sehr wichtig ansehen, und mir auch schon zwei mal hätte helfen können. Hier die Kopie.

https://ssl.buetow.org/comp/2010/10/geloschte-dateien-aus-dem-proc-fs-holen.html

fh

28.01.2011

Neues vom Heli

Filed under: Allgemein — Tags: — Thomas @ 18:01

Letztes Jahr ist irgendwie die Welle für den oberen Rotor locker geworden. Da wo die Welle in den Plastikhalter rein geht. Zumindest kam der Heli nicht mehr hoch und man sah auch, dass sich der Rotor langsamer drehte als normal.

Wenn man die Welle ausbaut und von Hand mit der Zange dreht, dann merkt man schon, dass sie durchdreht. Nur wie wieder fest bekommen? Haben versucht ein kleines Loch durch zu borhen, aber das kann man total vergessen. Die Welle ist aus einem viel zu harten Materiel, da fängt der Bohrer das heulen an. Ausserdem ist sie nur 3mm dick.

Also haben wir die gute alte Schmelz-Methode angewand. Diesmal aber mit einem Heißluftgebläse statt Lötkolben. Welle heiß machen und einfach ins Plastik gedrückt bzw kurz mit dem Hammer nachgeholfen. Bombenfest, kerzengerade :D

Auf zum nächsten Crash...

Eine Seite auf mehrere Seiten drucken

Filed under: Allgemein — Tags: — Thomas @ 18:01

Mehrere Seiten auf eine Seite drucken ist einfach, aber umgekehrt nicht so. Ausser man installiert sich poster.

apt-get install poster

Und schon hat man im kprinter Menu ein "Poster" Eintrag und kann nun auswählen, auf wieviele Papiere man drucken will. Ein wenig herum experimenteren, in der Vorschau sich das Ergebnis ansehen und fertig

27.01.2011

So wahr...

Filed under: Allgemein — Thomas @ 11:01

Ebenfalls erstaunlicher Zusammenhang:
(1) Das Schlechteste setzt sich immer durch.
(2) Die Masse entscheidet über das, was produziert wird.
(1->2) Die Masse nutzt das Schlechteste.
((1->2)') Gute Sachen werden nur von einer Minderheit genutzt.
(1') Das, was am wenigsten verbreitet ist, ist das bessere.

OpenCV Mittelwert der Farben in einem Video

Filed under: Allgemein — Tags: , — Thomas @ 01:01

Schaut euch mal dieses geniale Video an
http://www.youtube.com/watch?v=NtoYuwmTzt0

Wird das Video nicht zwischendrin irgendwie blasser? Es kommt mir gerade so vor. Hmmm man könnte ja mal die Farben analysieren. Also jedes einzelne Frame in den HSV (H Farbwert, S Sättigung, V Wert) umrechnen, den Mittelwert über alle Pixel bilden und dann grafisch auftragen.

Gesagt, getan.

mittelwertfarbe

Auf der X-Achse ist die Framenummer aufgetragen. Auf der Y-Achse HSV. Die rote Kurve ist H, grün S und blau V.
Man kann deutlich den Vor- und Abspann erkennen. Sonst bleiben die Werte relativ gleich. Die Kamera bewegt sich aber auch nicht.
Aber drei mal geht die Sättigung runter. Das Bild wird blass und bläulicher. Wie vermutet :)

Schön sind auch noch die ganzen Sprünge zu erkennen, wenn das Bild schnell ein und ausgeblendet wird.

Und hier mein quick&dirty Programm. Habe mplayer genutzt um an die einzelnen Frames zu kommen, da openCV Version 1 so sein Probleme mit Linux und avi hat.

mplayer ../Equilibrium\ -\ Unbesiegt\ Piano\ Cover.flv -vo jpeg -ao null

#include < stdio.h >
#include < stdlib.h >

#include < cv.h >
#include < highgui.h >

#define getPixel(img,x,y) (((uchar*)(img->imageData + img->widthStep*(y)))[x])
#define putPixel(img,x,y,color) (((uchar*)(img->imageData + img->widthStep*(y)))[x] = color)

#define getPixelB(img,x,y) (((uchar*)(img->imageData + img->widthStep*(y)))[x*3])
#define putPixelB(img,x,y,color) (((uchar*)(img->imageData + img->widthStep*(y)))[x*3] = color)

#define getPixelG(img,x,y) (((uchar*)(img->imageData + img->widthStep*(y)))[(x)*3+1])
#define putPixelG(img,x,y,color) (((uchar*)(img->imageData + img->widthStep*(y))) [(x)*3+1] = color)

#define getPixelR(img,x,y) (((uchar*)(img->imageData + img->widthStep*(y)))[(x)*3+2])
#define putPixelR(img,x,y,color) (((uchar*)(img->imageData + img->widthStep*(y)))[(x)*3+2] = color)

using namespace std;

int main()
{
char filename[18] ;
IplImage *image = 0;
IplImage* hsv = 0;
cvNamedWindow("original",1);

int i = 1;
snprintf(filename, 18,"jpg/%08d.jpg",i++);
image = cvLoadImage(filename);
hsv = cvCreateImage( cvGetSize(image), IPL_DEPTH_8U, 3 );

IplImage* h_plane = cvCreateImage( cvGetSize( image ), 8, 1 );
IplImage* s_plane = cvCreateImage( cvGetSize( image ), 8, 1 );
IplImage* v_plane = cvCreateImage( cvGetSize( image ), 8, 1 );

cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 );

while(1)
{
snprintf(filename, 18,"jpg/%08d.jpg",i++);

image = cvLoadImage(filename);
if(image == 0)
break;

cvCvtColor( image, hsv, CV_BGR2HSV );
cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 );

float meanh = 0, means = 0, meanv = 0;
for(int y = 0; y < hsv->height; y++)
{
for(int x = 0; x < hsv->width; x++)
{
meanh += getPixel(h_plane, x, y);
means += getPixel(s_plane, x, y);
meanv += getPixel(v_plane, x, y);
}
}
meanh /= image->width * image->height;
means /= image->width * image->height;
meanv /= image->width * image->height;

printf("%f %f %f\n", meanh, means, meanv);

cvShowImage("original", image);

cvWaitKey(10);

cvReleaseImage(&image);

}
}

Wer gern den QtCreator benutzt, hier noch mein .pro File.

SOURCES += main.cpp

INCLUDEPATH += /usr/include/opencv
CONFIG += link_pkgconfig
PKGCONFIG += opencv

Und hier mal ein "normales" Video
mittelwertfarbe2

22.01.2011

Fouriertransformation Primzahlen Spielerreien

Filed under: Allgemein — Tags: , , — Thomas @ 00:01

Hab die Tage mein altes Primzahl Projekt wieder ausgegraben. Der nächste Schritt war, die Daten mal mit der Fouriertransforamtion genauer under die Lupe zu nehmen. Um mit der Fouriertransformation etwas vertrauter zu werden, habe ich sie auch gleich mal in C++ implementiert. War auch garnicht so schwer. Zwei Schleifen und komplexe Multiplikationen.

Da der g++ eine Klasse für komplexe Zahlen anbietet, war auch das nicht so schwer. Nur das interpretieren der fouriertransformatieren Daten war nicht so einfach.

In den animierten Bilder unten sieht man das Ergebnis. Die Daten sind in rot dargestellt. Und in grün die Fourierreihe wie sie sich langsam den Daten anpasst. Es wurden aber nur Frequenzen mit einer relativ hohen Amplitute verwendet.

pic2

Hier ein vergrösserter Ausschnitt.

fourierprimreihe_nahaufnahme

Mal sehen was die Tage noch so an Erkenntnisse bringen. Vllt. zeigen sich in größeren Datensätze irgendwelche periodischen Muster.

20.01.2011

C freien Speicher ermitteln

Filed under: Allgemein — Tags: — Thomas @ 13:01

Das Zauberwort heisst sysinfo.

// Um den freien RAM zu bestimmen
#include < sys/sysinfo.h >

struct sysinfo meminfo;
if(sysinfo(&meminfo) != 0)
perror("Kann keine RAM Infos auslesen");

printf("mem total %i\n" ,meminfo.totalram/1024/1024);

free memory usage

Powered by WordPress