C++ OpenCV MotionButton ve MouseControl vs...

Başlatan Kaanx, 20 Mart 2014 - 08:07:48

« önceki - sonraki »

0 Üyeler ve 5 Ziyaretçi konuyu incelemekte.

Kaanx

Merhabalar. Ubunttu 12.04 üzerinde Opencv kutuphanelerini kullanarak c++ ile webcam ile mouse Kontrolü , renkli obje takipi(Color Object Tracking).Sanal dokunmatik ekran(Virtual Touch Screen). MotionButton(Ekrana buton ekleme (Xbox tarzı )). El ve parmak tanıma (Finger and Hand recognation gesture), yapmak istiyorum. Opencv tutorialları inceledim fakat kendi başıma yazdıgımda bir türlü istediğim sonucu bulamadım. elinde kaynak olabilecek döküman veya yardımcı olabilecek arkadaşlar varsa burada paylaşabilirse cok memnun kalırım. Yardımlarınızı bekliyorum.

Kaanx


sem

Hiç ilgilenmediğim bir alan şu ana kadar pratik olarak. Biraz okumuştum internetten bir zamanlar o kadar. Fakat yazdığnız kodları burada paylaşırsanız belki vakti olan arkadaşlarla beraber fikir yürüterek sonuca ulaşabiliriz.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Elimde benimde tam bir kod yok kendim yazıyorum sıfırdan hani elinde bu yönde çalışma yapmıs arkadaslar varsa bana fikir verirlerse cok memnun kalırım yada ellerinde ki kaynakları ve ya araştırma yapabilicem anahtar sözcükleri verirlerse çok memnum kalırım.

sem

Anladım kaynak paylaşımı olarak istiyorsunuz. Çünkü konu şu an biraz havada kalıyor. Mesela istediğim sonucu alamıyorum  derken ne demek istediğinizi, ne yapmaya çalıştıığınız ve nasıl bir sonuç aldığınızı kestirmek çok zor. Bu nedenle söylemiştim, kendi denemelerinizi paylaşabilirseniz OpenCV bilmeyen ama C++ bilen arkadaşların da desteğini alabilirsiniz, size yardımcı olmak isteyenlere sizin de biraz yol göstermeniz gerekebilir yani bazı durumlarda =)

Kaynak paylaşan olursa Türkçe ben de boş bir vaktimde okuyabilmek isterdim =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

karboran

Kaynak için zor bir konu türkçe kaynak zaten yok. Diğer taraftan ingilizce kaynakta gerçekten sınırlı bu konuda. Pcdunio üzerinde openCv c++ ile usb kameradan fotoğraf ve video çekmeyi başardık. Lakin ötesine pek gidemedik. Allah yardımcınız olsun :).  Yinede mesajı boş geçmemeyim

Tamamı ingilizce olmakla birlikte ;
http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html
http://www.pages.drexel.edu/~nk752/tutorials.html
http://docs.opencv.org/doc/tutorials/tutorials.html
http://opencv-srf.blogspot.com.tr/
http://hxr99.blogspot.com.tr/2011/12/opencv-examples-camera-capture.html
Kabin basıncı düştü motorlarda arıza !
Vakit süratle aksın hakimiyet kur nabıza !
İçinden nasıl geldiyse yaz anlat herşeyi ,
Bu mektup varmıcak hayalini kurduğun kıza !

Kaanx

@sem

Haklısınzı fakat internet üzerindeki dokümantasyonlardan başka benimde pek bişi yaapbildiim söylenemez. ve Opencv örneklerindne öte bişi yapamadım. Hani böyle bitirme olarak yapmıs arkadaşlarımız bizlere burada hiç değilse keyword olarak bağlantı paylaşssa sonuca hızlı gideriz diye dusunerek açmıştım bende konuyu ama biraz garip anlatmısım özür dilerim :)

@karboran

Hocam teşekkürler öncelikle kaynak olarak güzel şeyler paylaşmıssınız bende bunların bazılarına ulaşmıstım fakat ulaşmadıklaırmda var bunları değerlendiricem. Benim yapıcam iş cok basit aslında. Ekranın köseşisnde bir button alanı olusturum elim o bölgeye geldiğinde bana buton basıldı diye bişi dicek mesela yani olay basit fakat dediğiniz ingilizce olarak keyword sıkıntısı yasıyorum bende eğer cevrenizde varsa yardımlarınızı esirgemezseniz cok sevinirim.

Kaanx

Hocam sunu yapsam biraz yeterli olucak ekrana bir baloncuk bastıramadım ben henuz ;  Video Ekranına bir resim bastırıcam mesela bu kadar basit bir olay sözde. işin içinden cıkamadım

http://www.youtube.com/watch?v=gaeJX2A8GvA adam burada yapmıs . böyle şeyler çizdiricem ben cok zor değildir bence ama ben yapamadım.

Reverser

#8
Alıntı yapılan: Kaanx - 31 Mart 2014 - 22:18:26
Hocam sunu yapsam biraz yeterli *olacak ekrana bir baloncuk bastıramadım ben henuz ;  Video Ekranına bir resim bastırıcam mesela bu kadar basit bir olay sözde. işin içinden cıkamadım

http://www.youtube.com/watch?v=gaeJX2A8GvA adam burada yapmıs . böyle şeyler çizdiricem ben cok zor değildir bence ama ben yapamadım.

OpenGL ve SDL kullanarak ekranda imaj oluşturmak mümkün olabilir.

Bu arada, gözünüzden kaçmış sanırım youtube bağlantısında ki proje açık kaynak kodluymuş buradan ulaşabilirsiniz :

https://github.com/omailson/movement



XFCE ROCKS !
Powered by Thunar & XFWM4



Kaanx

#9
Bunu inceledim fakat python bilgim olmadıgı için koddan pek bişi anlayamadım.  C ve ya C++ ile bu işlemi nasıl yapabilirim? Ve bilgisayarımda yasadıgım diğer bir sorun ise SDL hataları alıyorum.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Nisan 2014 - 11:37:59

Genel olarak mantıgım Video capture aldıgım ekrana bir resim eklemek ve burada resim eklediğim bölgeye elimi getirdiğimde bir çıktı oluşmasını sağlamak basit bir işlem gibi duruyor ama gözümden kaçan seyler var snaırım yardımlarınızı bekliyorum.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Nisan 2014 - 17:14:40

Güncel

Reverser

Alıntı yapılan: Kaanx - 01 Nisan 2014 - 11:36:38
bilgisayarımda yasadıgım diğer bir sorun ise SDL hataları alıyorum.

Tekrar merhaba, aldığınız hata nedir ? SDL kütüphanesini kullandığınız IDE üzerinden derleyiciye bağladınız mı ? 

Alıntı yapılan: Kaanx - 01 Nisan 2014 - 11:36:38
C ve ya C++ ile bu işlemi nasıl yapabilirim?

Python'dan C'ye port etmek çok zor olmasa gerek :)

XFCE ROCKS !
Powered by Thunar & XFWM4



Kaanx

Hocam o sadece bir denemededydi indirdim sildim örneği daha sonra fakat suan yapmak istediğim şey video ekranı çalısırken o frame de bir resim bastırmam lazım. Mesela ateşle yazıyo resimde elimi buraya getirince atış yapıldı yazıcak ekranda


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Nisan 2014 - 22:41:59

http://melihcicek.blogspot.com.tr/2013/10/opencv-haartraining-ile-obje-yakalama.html mesela suradaki örnek gibi hocam

Reverser

Alıntı yapılan: Kaanx - 01 Nisan 2014 - 22:39:14
Hocam o sadece bir denemededydi indirdim sildim örneği daha sonra fakat suan yapmak istediğim şey video ekranı çalısırken o frame de bir resim bastırmam lazım. Mesela ateşle yazıyo resimde elimi buraya getirince atış yapıldı yazıcak ekranda


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Nisan 2014 - 22:41:59

http://melihcicek.blogspot.com.tr/2013/10/opencv-haartraining-ile-obje-yakalama.html mesela suradaki örnek gibi hocam

Şöyle bir örnek verilmiş,

#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;


int main( int argc, const char** argv )
{
    CvCapture* capture = 0;
    Mat frame, frameCopy, image;

    capture = cvCaptureFromCAM( 0 ); //0=default, -1=any camera, 1..99=your camera
    if(!capture) cout << "No camera detected" << endl;

    cvNamedWindow( "result", 1 );

    if( capture )
    {
        cout << "In capture ..." << endl;
        for(;;)
        {
            IplImage* iplImg = cvQueryFrame( capture );
            frame = iplImg;
            if( frame.empty() )
                break;
            if( iplImg->origin == IPL_ORIGIN_TL )
                frame.copyTo( frameCopy );
            else
                flip( frame, frameCopy, 0 );

            if( waitKey( 10 ) >= 0 )
                cvReleaseCapture( &capture );
        }

        waitKey(0);

    cvDestroyWindow("result");

    return 0;
    }
}


Ekrana imaj bastırmak için,

IplImage *img;
Mat imgMat(img);

imgMat matris dizisini döngü kullanarak okumanız yeterliymiş.

XFCE ROCKS !
Powered by Thunar & XFWM4



Kaanx

#13
Hocam hemen deniyorum bunu


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Nisan 2014 - 23:04:00

Hocam malesef video ekranı bile açılmadı ve burada ekrana basılacak resim seçilmemiş gibi

Reverser

Alıntı yapılan: Kaanx - 01 Nisan 2014 - 22:57:55
Hocam hemen deniyorum bunu


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Nisan 2014 - 23:04:00

Hocam malesef video ekranı bile açılmadı ve burada ekrana basılacak resim seçilmemiş gibi


capture = cvCaptureFromCAM( CV_CAP_ANY ); //0=default, -1=any camera, 1..99=your camera
if( !capture )
{
cout << "No camera detected" << endl;
}

cvNamedWindow( "result", CV_WINDOW_AUTOSIZE );

if( capture )
{
cout << "In capture ..." << endl;
for(;;)
{
IplImage* iplImg = cvQueryFrame( capture );
frame = iplImg;

if( frame.empty() )
break;
if( iplImg->origin == IPL_ORIGIN_TL )
frame.copyTo( frameCopy );
else
flip( frame, frameCopy, 0 );

cvShowImage( "result", iplImg );

if( waitKey( 10 ) >= 0 )
break;
}
// waitKey(0);
}

cvReleaseCapture( &capture );
cvDestroyWindow( "result" );

return 0;


kodda hata var sanırım birde bunu deneyin. Bu kod ekrana imaj basmıyor henüz imajı bastırmak için anlatılan fonksiyonu yukarıda belirttim.

XFCE ROCKS !
Powered by Thunar & XFWM4



Kaanx

#15
video capture ekranlandı suan hocam resim koymaya gecebilir miyiz buradan arada işlmeler var mı =?


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Nisan 2014 - 23:16:45

Hocam dediğinizi nereye eklemm gerekiyor ?


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Nisan 2014 - 23:23:35

Hocam söyle birşey denedim fakat bende sonuc yok malesef


int main( int argc, const char** argv )
{
Mat resim;
resim=imread("star.jpg",CV_LOAD_IMAGE_COLOR);
    CvCapture* capture = 0;
    Mat frame, frameCopy, image;
    capture = cvCaptureFromCAM( 001 ); //0=default, -1=any camera, 1..99=your camera
    if( !capture )
    {
    cout << "No camera detected" << endl;
    }

    cvNamedWindow( "result", CV_WINDOW_AUTOSIZE );

    if( capture )
    {
    cout << "In capture ..." << endl;
    for(;;)
    {
    IplImage* iplImg = cvQueryFrame( capture );
    frame = iplImg;
    IplImage *img;
    Mat imgMat(img);


    if( frame.empty() )
    break;
    if( iplImg->origin == IPL_ORIGIN_TL )
    frame.copyTo( frameCopy );
    else
    flip( frame, frameCopy, 0 );

    cvShowImage( "result", iplImg );

    if( waitKey( 10 ) >= 0 )
    break;
    }
    // waitKey(0);
    }

    cvReleaseCapture( &capture );
    cvDestroyWindow( "result" );

    return 0;
}

Reverser

Alıntı yapılan: Kaanx - 01 Nisan 2014 - 23:08:29
video capture ekranlandı suan hocam resim koymaya gecebilir miyiz buradan arada işlmeler var mı =?


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Nisan 2014 - 23:16:45

Hocam dediğinizi nereye eklemm gerekiyor ?


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Nisan 2014 - 23:23:35

Hocam söyle * bir şey denedim fakat bende sonuc yok malesef


int main( int argc, const char** argv )
{
Mat resim;
resim=imread("star.jpg",CV_LOAD_IMAGE_COLOR);
    CvCapture* capture = 0;
    Mat frame, frameCopy, image;
    capture = cvCaptureFromCAM( 001 ); //0=default, -1=any camera, 1..99=your camera
    if( !capture )
    {
    cout << "No camera detected" << endl;
    }

    cvNamedWindow( "result", CV_WINDOW_AUTOSIZE );

    if( capture )
    {
    cout << "In capture ..." << endl;
    for(;;)
    {
    IplImage* iplImg = cvQueryFrame( capture );
    frame = iplImg;
    IplImage *img;
    Mat imgMat(img);


    if( frame.empty() )
    break;
    if( iplImg->origin == IPL_ORIGIN_TL )
    frame.copyTo( frameCopy );
    else
    flip( frame, frameCopy, 0 );

    cvShowImage( "result", iplImg );

    if( waitKey( 10 ) >= 0 )
    break;
    }
    // waitKey(0);
    }

    cvReleaseCapture( &capture );
    cvDestroyWindow( "result" );

    return 0;
}



İmaj yüklemek için aşağıdaki örnek kullanılacak artık siz ayarlarsınız :)

#include<opencv/cvaux.h>
#include<opencv/highgui.h>
#include<opencv/cxcore.h>
#include<opencv/cv.h>


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


int main(int argc, CHAR* argv[])
{
  IplImage* img = cvLoadImage("C:\\Users\\_k_adi\\Desktop\\test.jpg");

  if (!img)
  {
    printf("Imaj yuklenemedi !!!\n");
    return 1;
  }

  cvNamedWindow("falanfilan");
  cvShowImage("falanfilan", img);

  cvWaitKey(0);
  cvReleaseImage(&img);

return 0;
}

XFCE ROCKS !
Powered by Thunar & XFWM4



Kaanx

#17
Hocam bunu kısmı bende yapabiliyorum ama sorun surada. Video capture yaparken ekranın köşesindede o resmi basabilmek onu yapamıyorum :)


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 02 Nisan 2014 - 14:14:02

bu kod ile aynı frame içinde hem video ve image dosyası var fakat video olan kısım içinde bu resmi nasıl yerleştiririm. amacım video olan kısmı büyütüp resimi ufaltıp bu video frame üzerine düşürmek.

/*
* Deneme4.cpp
*
*  Created on: 31 Mar 2014
*      Author: kaan
*/
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/video/tracking.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/video/background_segm.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "iostream"
#include "stdio.h"
#include "stdlib.h"
#include <cv.h>
#include <highgui.h>
#include <iostream>
#include <cmath>

using namespace cv;
using namespace std;


void cvShowManyImages(char* title, int nArgs, ...) {

    // img - Used for getting the arguments
    IplImage *img;

    // DispImage - the image in which input images are to be copied
    IplImage *DispImage;

    int size;
    int i;
    int m, n;
    int x, y;

    // w - Maximum number of images in a row
    // h - Maximum number of images in a column
    int w, h;

    // scale - How much we have to resize the image
    float scale;
    int max;

    // If the number of arguments is lesser than 0 or greater than 12
    // return without displaying
    if(nArgs <= 0) {
        printf("Number of arguments too small....\n");
        return;
    }
    else if(nArgs > 12) {
        printf("Number of arguments too large....\n");
        return;
    }
    // Determine the size of the image,
    // and the number of rows/cols
    // from number of arguments
    else if (nArgs == 1) {
        w = h = 1;
        size = 300;
    }
    else if (nArgs == 2) {
        w = 2; h = 1;
        size = 300;
    }
    else if (nArgs == 3 || nArgs == 4) {
        w = 2; h = 2;
        size = 300;
    }
    else if (nArgs == 5 || nArgs == 6) {
        w = 3; h = 2;
        size = 200;
    }
    else if (nArgs == 7 || nArgs == 8) {
        w = 4; h = 2;
        size = 200;
    }
    else {
        w = 4; h = 3;
        size = 150;
    }

    // Create a new 3 channel image
    DispImage = cvCreateImage( cvSize(100 + size*w, 60 + size*h), 8, 3 );
    cvZero(DispImage);
    // Used to get the arguments passed
    va_list args;
    va_start(args, nArgs);

    // Loop for nArgs number of arguments
    for (i = 0, m = 20, n = 20; i < nArgs; i++, m += (20 + size)) {

        // Get the Pointer to the IplImage
        img = va_arg(args, IplImage*);

        // Check whether it is NULL or not
        // If it is NULL, release the image, and return
        if(img == 0) {
            printf("Invalid arguments");
            cvReleaseImage(&DispImage);
            return;
        }

        // Find the width and height of the image
        x = img->width;
        y = img->height;

        // Find whether height or width is greater in order to resize the image
        max = (x > y)? x: y;

        // Find the scaling factor to resize the image
        scale = (float) ( (float) max / size );

        // Used to Align the images
        if( i % w == 0 && m!= 20) {
            m = 20;
            n+= 20 + size;
        }

        // Set the image ROI to display the current image
        cvSetImageROI(DispImage, cvRect(m, n, (int)( x/scale ), (int)( y/scale )));

        // Resize the input image and copy the it to the Single Big Image
        cvResize(img, DispImage);

        // Reset the ROI in order to display the next image
        cvResetImageROI(DispImage);
    }

    // Create a new window, and show the Single Big Image
    //    cvNamedWindow( title, 1 );
    cvShowImage( title, DispImage);

    //    cvWaitKey(20);


    // End the number of arguments
    va_end(args);

    // Release the Image Memory
    cvReleaseImage(&DispImage);
}
int main() {

    IplImage *img1 = imread("star.jpg");

    CvCapture* capture = cvCaptureFromCAM(001);
    if ( !capture ) {
        fprintf( stderr, "ERROR: capture is NULL \n" );
        getchar();
        return -1;
    }
    // Create a window in which the captured images will be presented
    cvNamedWindow( "mywindow", CV_WINDOW_AUTOSIZE );
    // Show the image captured from the camera in the window and repeat
    while ( 1 ) {
        // Get one frame
        IplImage* frame = cvQueryFrame( capture );
        if ( !frame ) {
            fprintf( stderr, "ERROR: frame is null...\n" );
            getchar();
            break;
        }
        //cvShowImage( "mywindow", frame );
        cvShowManyImages("Image", 2, img1, frame);
        // Do not release the frame!
        //If ESC key pressed, Key=0x10001B under OpenCV 0.9.7(linux version),
        //remove higher bits using AND operator
        if ( (cvWaitKey(10) & 255) == 27 ) break;
    }
    // Release the capture device housekeeping
    cvReleaseCapture( &capture );
    cvDestroyAllWindows();

    return 0;
}



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 02 Nisan 2014 - 22:18:39

Hocam video capture içerisinde picturebox kullanmam gerekiyormus bunu nasıl yapabilirim ?

Kaanx

Güncel - Opencv ile ubuntu üzerinde picturebox nasıl oluşturulur.

Kaanx