Je cherche des moyens de créer un effet de lentille de Fisheye, j'ai examiné des documentations pour OpenCV, on dirait qu'il contient des fonctions d'étalonnage de la caméra pour des distorsions radiales telles que Fisheye. Est-il possible de simuler la distorsion de Fisheye par OpenCV? p>
S'il est possible de le faire par OpenCV, comparer à OpenGL, lequel générera de meilleurs résultats? Merci. P>
5 Réponses :
Voulez-vous utiliser cette distorsion sur des images sintetiques ou souhaitez-vous postuler à une caméra vidéo ou quelque chose? P>
Dans OpenCV, vous devriez pouvoir effectuer un étalonnage de la caméra (à l'aide des fonctions intégrées, l'algorithme de Zhang) .. P>
dans OpenGL Voir ceci. P>
considère p>
J'ai créé cette application à l'aide de OpenCV. Est-ce l'effet que vous parlez de? J'ai essentiellement codé la formule indiquée sur "la distorsion (optique) de Wikipedia" Je peux montrer le code si nécessaire
Donc, le creux du programme est la boucle double pour em> qui itière pixel par pixel sur l'image de résultat et recherche le pixel correspondant dans l'image d'entrée à l'aide de la formule de distorsion radiale (C'est la façon dont la déformation de l'image est généralement faite - peut-être contrer intuitivement par la projection arrière de la sortie à l'entrée). Certaines subtilités ont à voir avec l'échelle de l'image de sortie (dans ce programme, l'image résultante a la même taille que l'entrée) et je ne vais pas y entrer à moins que vous ne souhaitiez entrer plus de détails.Enjoy. p>
Oui! La distorsion du tonneau sur la page "Distorsalité (optique) de Wiki est exactement ce que je cherche! J'aimerais savoir mapper une image autour des lentilles de Fisheye avec OpenCV. Pouvez-vous montrer votre code ici? Ou montre-moi quelques astuces? Merci. Salutations
J'ai essayé de comprendre le code, mais je suis légèrement retenu, avec de nombreuses opérations que je ne savais pas pourquoi elles se produisent. Est-il possible d'ajouter un bref brèves ou une description?
Merci à vous pour ce code. Cela m'aide beaucoup. Je le transcrit pour Java. Peut-être que quelqu'un a une fonction similaire pour une distorsion tangenciale sympathique?
Bonjour, ce code Java est exactement ce dont j'ai besoin. J'essaie de créer le même eFect sur Android mais je ne peux pas utiliser Bufferedimage, car Android ne le supporte pas. Y a-t-il un moyen de faire fonctionner ce code sur Android? Toute aide serait appréciée, merci Matt
Merci à la ci-dessus 2 pour ce code. J'ai modifié le code transcrit ci-dessus en Java pour utiliser bitmaps au lieu de bufferedimage. Cela permet au code de fonctionner sur Android (qui ne prend pas en charge AWT). J'ai également fait l'effet qui manipule simplement les pixels dans un cercle plutôt que dans l'ensemble du bitmap, cela donne un effet "lentille" fisheye. Espère que cela aide tous les développeurs Android.
import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; import android.widget.Button; public class Jjilapp extends Activity { private static final String TAG = "*********jjil"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.touchview); final TouchView touchView = (TouchView)findViewById(R.id.touchview); final HorizontalSlider slider = (HorizontalSlider)findViewById(R.id.slider); touchView.initSlider(slider); }//end of oncreate }
J'ai essayé votre code dans Android mais la sphère est toujours noire. J'ai également essayé cela sur OpenCV et son bien fonctionnant, mais j'ai besoin de cette fonctionnalité dans l'application Android. Pourriez-vous s'il vous plaît me guider à ce sujet. Merci
@Chalallenger Quelle version de Android utilisez-vous?
Je l'ai débogué et j'ai trouvé le problème que la valeur alpha de Pixel ne constitue pas dans la région de la sphère que celle-ci arrive en noir. Réglage de l'alpha de Pixel résout le problème. Merci pour votre temps
@CHallenger Hey Hey Heavy Vous avez travaillé! J'ai réellement réalisé ce code afin qu'il traite le bitmap à l'aide de la parallélisation. Il vérifie l'appareil pour voir combien de processeur sont disponibles, par exemple sur mon HTC One X, il y a 4 noyaux. Il divisera le bitmap en 4, attribuera chaque segment de noyau, puis cousez-le tout en arrière lorsque vous avez terminé. Vous pouvez avoir le code si vous le souhaitez, faites le moi savoir. Cela fonctionne sur Android 2.1, mais pas trop bon sur Android 4.0. Si tu veux jouer avec ça et voir si tu peux le faire, si tu le fais, je viens de demander une mise à jour;)
Merci, j'apprécie votre aide. J'ai utilisé le code ci-dessus, il fonctionne bien pour une image carrée, mais lorsque l'image a trop de différence entre la largeur et la hauteur, la sphère de sortie viendra alors du noir de la limite de la limite non du centre, j'ai essayé de déboguer mais pas encore réussi, si Vous avez une idée de la façon de résoudre ce problème s'il vous plaît partagez-la. Ce serait un plaisir que vous partagiez le code de parallisation avec moi.
@Challenger Bonjour j'ai mis à jour le message pour inclure le code de parallélisation. Cela fonctionne sur le portail Samsung Galaxy exécutant Android 2.1 mais pas sur mon HTC OneX exécutant Android 4.0. Si vous pouvez l'obtenir avant moi, vous me mettez à jour, merci.
Hey @turtleboy merci, c'est agréable de voir votre réponse aidez-moi dans une certaine mesure. J'ai une question, je crée une application, qui aime la zone d'une zone à l'image, comme des yeux. Connaissez-vous un indice à ce sujet? Si votre code fonctionnera sur cette situation.
@And_dev salut, ce code crée une distorsion de la lentille / œil de poisson. L'application que j'ai faite était pour une application d'augmentation mammaire. Vous passez un bitmap dans et cela crée l'effet des seins plus gros. Alors peut-être que c'est ce que vous voulez. Il semble que le bitmap soit bombé. Imaginez un chiffon de table sur une table avec 2 balles en dessous. Le tissu est comme le bitmap. Meilleur moyen de le décrire. laissez-moi savoir si vous voulez plus de code :)
Merci pour la réponse, je l'ai eu de vos réponses antérieures, vous êtes assez clair par écrit, et je suis assez bien compris avec l'exemple de la poitrine que vous avez donné;)> Même je fais la même chose, de même que je dois sortir les yeux et pop bouche. J'ai essayé ceci mais c'est créer du cercle blanc au centre, je veux quelque chose où je touche ou où je peux donner un point. Si je peux avoir votre adresse e-mail, ce sera génial afin que vous puissiez partager des choses là-bas
Bonjour, pas de probs, je peux faire quoi que ce soit au moment car je n'ai pas de code source avec moi. Je vais regarder des choses plus tard ce soir ou demain et entrer en contact avec vous. J'ai le code où vous touchez l'écran et il place la distorsion à ce point. Ours avec moi et je vais vous donner le code.
Je ne peux rien faire à Mo, je voulais dire :)
Merci, j'attendrai attendre plus de temps. :)
@And_dev salut, désolé c'est pris si longtemps mais j'ai été un peu occupé. Si vous avez besoin d'aide, c'est cool, envoyez-moi un message.
Oui cela ne fonctionne pas pour moi. Vous postera le code que j'utilise.
@And_Dev Avant de faire quoi que ce soit, quelle version d'Android utilisez-vous. Lorsque j'ai écrit le code, c'était pour Android 2.1, cela fonctionne sur un téléphone qui l'exécute mais pas sur mon téléphone plus récent fonctionnant 4+. Si vous pouvez le tester sur 2.1 d'abord pour voir si cela fonctionne, vous devrez peut-être régler le bogue dans Android 4+.
C'est bon .. J'essayais sur l'émulateur avec la version 2.3 et le téléphone HTC avec la version 4.0.
@And_Dev Je n'ai été testé que sur 2 téléphones, portail Samsung Galaxy 2.1. Cela a fonctionné à ce sujet. L'autre téléphone que cela n'a pas fonctionné était HTC One X en cours d'exécution 4.0. Si vous le faites courir sur le niveau supérieur Android, vous permettez-vous de savoir quel est le problème. merci matt
Je ferai sûrement cela, mais j'ai peur si cela fonctionnera pour moi sur la version inférieure d'abord.
J'ai débogué les fichiers Java et cela fonctionne bien sur mes téléphones (supérieur à 4.0). Il se compose de 3 fichiers Java et de 1 fichier XML. Vous devez placer dayerboardback.jpg fichier sous répertoire dessiné. Comme quelqu'un l'a dit, une valeur alpha était manquante et je l'ai donnée "0x0ff". De plus, le montant supérieur de certaines boucles était faux.
// 1. MultirRunTimeProcessorFilter.java P>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <LinearLayout android:id="@+id/buttons" android:layout_centerHorizontal="true" android:layout_alignParentTop="true" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/buttontoggle" android:text="Barrel 1P" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/buttonbarrel" android:text="Barrele NP" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/button0" android:text="ORIGINAL" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <TextView android:id="@+id/mStatus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" - Ready - " android:textAppearance="?android:attr/textAppearanceSmall" android:layout_below="@+id/buttons" android:layout_centerHorizontal="true" /> <ImageView android:id="@+id/touchview1" android:layout_below="@+id/mStatus" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" /> <!--ImageView android:id="@+id/touchview2" android:layout_below="@+id/touchview1" android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" /-->