Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Θα ήθελα τη βοήθεια σας σε κάτι πολύ απλό στην matlab:
Πως μπορώ να τοποθετώ μια εικόνα πάνω σε μια άλλη σε συγκεκριμένη θέση και να παίρνω στο τέλος το αποτέλεσμα σαν νέα εικόνα .

 

Έχω καταφέρει να βάλω κείμενο πάνω σε εικόνα (σε όποιο σημείο θέλω) με τον παρακάτω κώδικα:

img=imread('c:\q.jpg','jpg');
hfig=figure;
imshow(img);
hold on;
text(300,300,'insomnia','FontSize',26,'color',[1,0,0],'EdgeColor','red','LineWidth',3);

orig_mode = get(hfig, 'PaperPositionMode');
set(hfig, 'PaperPositionMode', 'auto');
img_with_text = hardcopy(hfig, '-Dzbuffer', '-r0');

 

Στο σημείο δηλαδή (300,300) της εικόνας "q.jpg"γράφω το text:insomnia

Με κάποιο τρόπο θα ήθελα αντί για κείμενο να βάλω μια εικόνα στο σημείο αυτό.

Σκαλίζοντας στο internet βρήκα κάτι σχετικό αλλά βλέπω οτι σε περιορίζει στο να βάλεις τη δεύτερη εικόνα στην πάνω αριστερή γωνία της πρώτης....και όχι σε οποιο σημείο θέλεις..:

img=imread('c:\q.jpg','jpg');
img2=imread('c:\r.jpg','jpg');
[m, n, ~] = size(img2);
img(1:m,1:n,:)= img2;
imshow(img);

 

Αν  μπορεί καποιος να βοηθησει...

Ευχαριστώ!

Δημοσ.

Εφόσον θέλεις να χειριστείς εικόνες μόνο γιατί μπλέκεις με έτοιμες συναρτήσεις και δεν γράφεις κάτι μόνος σου? 

 

πχ, θα θεωρήσω μια εικόνα Α και την μικρή Β που θέλεις να την βάλεις επάνω στην Α στο σημείο (300,300). Για απλότητα θεωρώ οτι είναι ασπρόμαυρες, και οτι η Β χωράει ολόκληρη στην A

[xa ya ]= size(A); % no need 
[xb yb ]= size(;


C=A; % i eikona eksodou

% de mporw na skeftw twra poio einai to swsto apo ta parakatw mallon to 2o...
C(300:300+xb,300:300+yb)=B;
C(300:300+xb-1,300:300+yb-1)=B;

στη περίπτωση που δεν χωράει όλη, πρέπει να κάνεις κατάλληλες ελέγχους και αλλαγές.

Δημοσ.

Στην γραμμή 

 

 

img(1:m, 1:n, : ) = img2
 

είναι που γίνεται η επικάλυψη. 

 

Απλά θα πρέπει να φροντίσεις η μετάθεση του αρχικού σημείου (1:m, 1:n) να γίνει τόσα σημεία όσα χωράνε στο πρώτο image που έχεις. 

 

Εάν, π.χ., θα ήθελες να πάει στην μέση ή, εάν δεν χωράει, όσο πιο πριν τότε θα είχες κάτι σαν:

 

 

horOffset = 300;
verOffset = 400;
if (size(img2, 1) + verOffset) > size(img, 1) verOffset = size(img, 1) - size(img2, 1); end
if (size(img2, 2) + horOffset) > size(img, 2) horOffset = size(img, 2) - size(img2, 2); end
img(verOffset:size(img2, 1), horOffser:size(img2, 2), : ) = img2;
Με την προϋπόθεση ότι:

 

size(img, 1) > size(img2, 1)
και

 

size(img, 2) > size(img2, 2)
  • Like 1
Δημοσ.

Σας ευχαριστώ όλους. Τελικά το εφτιαξα με τον παρακάτω τρόπο και δουλευει:

 

clear;
img1=imread('c:\a.png','png');
img2=imread('c:\b.png','png');


[m, n, ~] = size(img2);

img1(50:(50+m-1),100:(100+n-1),:) = img2;
imshow(img1);
 
-----------------
 

Τώτα όμως έχω άλλο πρόβλημά !!!

Παρόλο που το εικονίδιο (b.png) που θέλω να τοποθετίσω πάνω από την εικόνα (a.png) έχει διάφανο background όταν μπαίνει πάνω από την εικόνα εμφανίζεται με μαύρο  background! Τι μπορώ να κάνω ώστε να μη γίνεται αυτό?

Σας επισυνάπτω τις είκόνες και το αποτέλεσμα.

"a.png"

http://s16.postimg.org/ssvt7d11h/image.png

 

"b.png"

http://s14.postimg.org/fitbkpna5/image.png

 

"new.png"

http://s14.postimg.org/itmqhpjj5/new.png

 

 

Σας ευχαριστώ και πάλι

jjpag

 

Δημοσ.

Περίεργο μου φαίνεται οτι είναι μαύρο, τέσπα μια γρήγορη αλλά ίσως να μην έχει να αποτελέσματα που θέλεις λύση είναι η εξής:

 

img2(img2==0)=256; % αντικατάσταση όλων των μαύρων pixel με άσπρο χρώμα,

 

img1(50:(50+m-1),100:(100+n-1),: )= img2;

 

 

Κάνοντας λίγο πιο δύσκολο θα μπορούσες να βρεις τις θέσεις όπου είναι άσπρο και να μην αντικαταστήσεις τα pixel της εικόνας a σε εκείνες τις θέσεις όπου είναι άσπρο... 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...