Crea sito

Codando e programmando in libertà

Articoli riguardo la programmazione, snippet e codici particolari

[Guida C++] Installare OpenCV e QT Creator su Windows 7 64 bit

Written by  on dicembre 14, 2015

Dato che ho avuto problemi nel configurare questi strumenti su Windows (su Linux é infinitamente piú semplice) ho pensato di creare questa guida. Stando a quello che ho trovato online, la mia dovrebbe essere la piú aggiornata, perlomeno usando le versioni stabili dei vari tool.

Programmi da scaricare:

Cmake : ci serve per configurare le opzioni di compilazione. Meglio usare la versione stabile, la 3.4.1.

QT Bundle : ci fornisce gli strumenti per creare l’interfaccia e il compilatore Mingw. Io ho usato QT 5.5.1 con Mingw 4.92 32bit (che va benissimo pure per ambienti x64).

OpenCV : é l’insieme delle librerie di computer vision. Nel pacchetto troverete sia dei binari precompilati (inutili, danno piú problemi che altro) che i sorgenti, da cui compileremo la nostra versione.

Importante: cercate di create dei percorsi file senza spazi! QtCreator gestisce male la presenza di spazi nei percorsi.

  1. Scompattate l’archivio OpenCV in un percorso facile da ricordare (per esempio C:\Opencv).
  2. Installare QT, insieme al Creator e al compilatore Mingw (anche in questo caso C:\QT sará perfetto).
  3. Controllate che nelle variabili di sistema, nel PATH abbiate questi tre percorsi: C:\Qt\Qt5.5.1\Tools\mingw492_32\bin , C:\Qt\Qt5.5.1\5.5\mingw492_32\bin , C:\Cmake\Bin.
  4. Avviare Cmake settando come cartella dei sorgenti la cartella sources di opencv.
  5. Come cartella di destinazione dei binari potete creare una cartella come C:\Programs\opencv2411. Tale denominazione é utile sia per evitare spazi in un percorso, sia per poter in seguito installare versioni diverse di opencv nello stesso pc (le librerie hanno come suffisso il numero di versione, quindi non ci sono problemi!).
  6. Premete Configure scegliendo come compilatore Mingw e come opzioni quelle di default.
  7. Correggete i campi rossi e premete Configure fin quando non ottenete tutte le righe bianche. Flaggate l’opzione WithQT e togliete il flag su IPP.
  8. Qualche problemino potrebbe sorgere se non avete a disposizione Python e/o il Java SDK. Vi basta semplicemente togliere il flag sulle opzioni apposite (del tipo OpenCVJava, Python support o simili). Se vi serve questo supporto, installate Python 2.7.11 e il Java SDK nelle locazioni di default e il programma dovrebbe rilevarli in automatico.
  9. Quando non avrete piú problemi di sorta, premete Generate.
  10. Col cmd di Windows andate in C:\Programs\opencv2411 e qui date mingw32-make.
  11. Se la compilazione non ha portato ad errori (in genere basta leggere la prima riga, indica il modulo di opencv che dá problemi, in genere per qualche dipendenza non risolta), date mingw32-make install.
  12. Per maggior sicurezza (é una misura che ho preso io, per una questione di visibilitá delle shared library su Windows), copiate i file *.dll presenti dentro la cartella bin dei binary in C:\Windows\SysWOW64\.
  13. Aprite QT Creator e create un nuovo progetto widget. Nel file *.pro inserire queste istruzioni:
win32

{

INCLUDEPATH += C:\Programs\opencv2411\install\include # giusta
LIBS += C:\Windows\SysWOW64\libopencv_core2411.dll \
C:\Windows\SysWOW64\libopencv_highgui2411.dll \
C:\Windows\SysWOW64\libopencv_imgproc2411.dll
}

In generale, aggiungete le librerie che vi servono in questo modo.

Se avete fatto tutto bene, non solo il programma vi partirá senza problemi, ma quando proverete a includere qualche librerie di opencv, il sistema vi suggeritá il percorso.

Tutto é quanto!

I miei aliases di bash

Written by  on maggio 8, 2015

Questo file è direttamente collegato al mio file di aliases bash “.bash_aliases”. Lo condivido perchè alcuni alias potrebbero risultare comodi!

Semplice generatore di password in PHP

Written by  on dicembre 1, 2014

http://sandbox.lucaluke.altervista.org/sandbox/generapassword.php

$alfabeto = “ABCDEFGHILMNOPQRSTUZJXWYKabcdefghilmnopqrstuvzkwyxj1234567890|!£$%&/()=?^”;
$word = “”;
for($i=1;$i<10;$i++)
{
$ind = rand(1,73);
$word = $word.$alfabeto[$ind];
}
echo $word;

Ho omesso la parte in cui ho formattato l’output e ho aggiunto gli altri messaggi per non confondervi 🙂

Librerie e tools Javascript per power programmers

Written by  on novembre 10, 2014

Javascript

Siccome credo che la condivisione del sapere sia una delle cose più belle e potenti del mondo, condividerò qui tutti quegli strumenti che ritengo interessanti e utili.

In questo specifico post, voglio linkare qualche risorsa e delle librerie JAVASCRIPT per programmatori con una marcia in più:

RISORSE

LIBRERIE

(post sempre aggiornato!)

[Matlab] Test invarianza rispetto alla scala del filtro Gaussiano-Laplaciano mediante DoG

Written by  on luglio 12, 2014

%% Scale-invariance using Laplacian and DoG operators
% Implementazione di Illuminato Luca Costantino per Computer Vision

clear all;
close all;
img = imread(‘einstein.jpg’);
img_ridotta = imresize(img, 0.5);
fixed_location = [186 148];

dxx = [1 -2 1];
dyy = [1 -2 1]’;

sigma = 3;

% location 186,148
valori = zeros(31,5);
i = 1;
for(i=1:31)
% costruzione del filtro LoG e LoG normalizzato al variare di sigma
sigma = 2.6 + i*0.4;
GS = fspecial(‘gaussian’,round(6*sigma), sigma);
GSxx = conv2(GS,dxx,’valid’);
GSyy = conv2(GS,dyy,’valid’);
rect = [1 1 15 15];
GSxx = imcrop(GSxx,rect);
GSyy = imcrop(GSyy,rect);
laplacian_of_gaussian = GSxx + GSyy; % LoG non normalizzato
sn_lg = sigma^2 * laplacian_of_gaussian; % LoG normalizzato per la scala

%% applico i due filtri alle due immagini e salvo i valori della locazione indicata

img_filt = conv2(img,laplacian_of_gaussian); % immagine grande con LoG
img_filt_norm = conv2(img,sn_lg); % immagine grande con LoG normalizzato
img_ridotta_filt = conv2(img_ridotta,laplacian_of_gaussian); % immagine piccola con LoG
img_ridotta_filt_norm = conv2(img_ridotta,sn_lg); % immagine piccola con LoG normalizato

valori(i,:) = [sigma img_filt(186,148) img_ridotta_filt(93,74) img_filt_norm(186,148) img_ridotta_filt_norm(93,74)];

end

figure(‘Name’,’Esercizio 3′);
subplot(2,2,1);
h1 = plot(valori(:,1),valori(:,2),’color’,’r’); hold on
h2 = plot(valori(:,1),valori(:,3),’color’,’b’);
title(‘LoG’);
legend([h1 h2],{‘Immagine’, ‘Immagine Ridotta’});
xlabel(‘sigma’);
subplot(2,2,2);
h1 = plot(valori(:,1),valori(:,4),’color’,’r’); hold on
h2 = plot(valori(:,1),valori(:,5),’color’,’b’);
title(‘LoG Normalizzato’);
legend([h1 h2],{‘Immagine’, ‘Immagine Ridotta’});
xlabel(‘sigma’);
% prima immagine
subplot(2,2,3);
imshow(img); hold on
%e
r= max(valori(:,4));
x = 148;
y = 186;
th = 0:pi/50:2*pi;
xunit = r * cos(th) + x;
yunit = r * sin(th) + y;
h = plot(xunit, yunit,’color’,’y’);

title(‘Einstein’);
% seconda immagine
subplot(2,2,4);
imshow(img_ridotta); hold on
%e
r= max(valori(:,5));
x = 74;
y = 93;
th = 0:pi/50:2*pi;
xunit = r * cos(th) + x;
yunit = r * sin(th) + y;
h = plot(xunit, yunit,’color’,’y’);

title(‘Einstein 50%’);

einstein

[Matlab] Coloriamo le foto di Prokudin

Written by  on luglio 12, 2014

Update: ho creato una GUI per questo genere di attività (vedi Github)

https://it.wikipedia.org/wiki/Sergej_Michajlovi%C4%8D_Prokudin-Gorskij

 

% Esercizio 1: colorazione di foto mediante finestra di shift
% Implementazione di Illuminato Luca Costantino per Computer Vision

clear all;
close all;

% faccio scegliere all’utente il file e la modalità da usare
[img_input, pathname] = …
uigetfile({‘*.jpg’;’*.gif’;’*.png’;’*.tiff’},’File Selector’);

mode = 0; % automatico
% imname = ‘part1_4′; % name of the input file

%% Seguiamo i suggerimenti scritti nel file allegato all’assignment

%img_input = strcat(imname,’.jpg’);
fullim = imread(img_input); % read in the image
fullim = im2double(fullim); % convert to double matrix
height = floor(size(fullim,1)/3); % compute the height of each part (just 1/3 of total)
% separate color channels
B = fullim(1:height,:);
G = fullim(height+1:height*2,:);
R = fullim(height*2+1:height*3,:);

shift_riga_rossa_stringa = ”;
shift_colonna_rossa_stringa = ”;
shift_riga_verde_stringa = ”;
shift_colonna_verde_stringa = ”;

if(mode == 1)
[patch,rect_patch] = imcrop(B); % selezione manuale
%     figure(‘Name’,’Patch scelta’);imshow(patch);
% ROSSO
c = normxcorr2(patch,R);
[ypeak, xpeak] = find(c==max(c(:)));
yoffSet = ypeak-size(patch,1);
xoffSet = xpeak-size(patch,2);
shift_x = uint8(rect_patch(1)-xoffSet);
shift_y = uint8(rect_patch(2)-yoffSet);
R = circshift(R,[shift_y shift_x]);

% VERDE
c = normxcorr2(patch,G);
[ypeak, xpeak] = find(c==max(c(:)));
yoffSet = ypeak-size(patch,1);
xoffSet = xpeak-size(patch,2);
shift_x = uint8(rect_patch(1)-xoffSet);
shift_y = uint8(rect_patch(2)-yoffSet);
G = circshift(G,[shift_y shift_x]);
rgb_img = cat(3,R,G,B);

else if (mode == 0)
ssd_minimo = 0;
finestra = 10;
for shift_riga = -finestra:finestra
for shift_colonna = -finestra:finestra
immagine_shiftata = circshift(single(R), [shift_riga, shift_colonna]);
ssd_tmp = sum(sum((immagine_shiftata – B).^2));
if ssd_minimo == 0 % direttamente posso sostituire il valore
ssd_minimo = ssd_tmp;
R_spostato = immagine_shiftata;
shift_riga_rossa_stringa = num2str(shift_riga);
shift_colonna_rossa_stringa = num2str(shift_colonna);
else if ssd_tmp < ssd_minimo % aggiorno l’SSD
ssd_minimo = ssd_tmp;
R_spostato = immagine_shiftata;
shift_riga_rossa_stringa = num2str(shift_riga);
shift_colonna_rossa_stringa = num2str(shift_colonna);
end
end
end
end
% faccio lo stesso per il canale verde
for shift_riga = -finestra:finestra
for shift_colonna = -finestra:finestra
immagine_shiftata = circshift(single(G), [shift_riga, shift_colonna]);
ssd_tmp = sum(sum((immagine_shiftata – B).^2));
if ssd_minimo == 0 % direttamente posso sostituire il valore
ssd_minimo = ssd_tmp;
G_spostato = immagine_shiftata;
shift_riga_verde_stringa = num2str(shift_riga);
shift_colonna_verde_stringa = num2str(shift_colonna);
else if ssd_tmp < ssd_minimo % aggiorno l’SSD
ssd_minimo = ssd_tmp;
G_spostato = immagine_shiftata;
shift_riga_verde_stringa = num2str(shift_riga);
shift_colonna_verde_stringa = num2str(shift_colonna);
end
end
end
end
rgb_img = cat(3,R_spostato,G_spostato,B);
end
end

% % output
figure(‘Name’,’Immagine Shiftata’);
imshow(rgb_img);
title(strcat(‘Shift rosso=(‘,shift_riga_rossa_stringa,’,’,shift_colonna_rossa_stringa,’) Shift verde=(‘,shift_riga_verde_stringa,’,’,shift_colonna_verde_stringa,’)’));
imwrite(rgb_img,strcat(‘output_’,img_input),’jpeg’);

output_imm1_con_shift output_imm2_con_shift output_imm3_con_shift output_imm4_con_shift output_imm5_con_shift output_imm6_con_shift part1_1 part1_2 part1_3 part1_4 part1_5 part1_6