C++ for loop döngüleri

Tüm Object Oriented(Nesne Yönelimli) Programlama Dilleri, Algoritmalar, Sorunlar ve Çözümleri

Moderatörler: Toprak Rumelli, Expert

Taze Üye
Mesajlar: 1
Kayıt: 27 Şub 2015, 23:51

C++ for loop döngüleri

Okunmamış mesajgönderen yeterr » 28 Şub 2015, 00:17

Arkadaşlar Merhaba
Forumda daha yeniyim umarım doğru yere yazıyorumdur Benim şöyle bir sorunum var Elimde bir resim var ve resmin elinde eğriler var Ve ben her eğrinin üstünden üç nokta aldım Fakat bunu üç farklı hayali çemberin eğrileri kestiği noktaları bularak yaotım şimdi yapmam gereken şey bu noktaların hangileri aynı eğri üzerinde onu bulmam lazım bunun için iç içe üç for döngüsü ve devamıda bir if ile eğer bu üç nokta merkezi 190 190 olan çemberin denklemini sağlıyor mu onu kontrol etmem lazım Kodu buraya koyuyorum yardım ederseniz sevinirim
Kod: Tümünü seç
#include <iostream>
#include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/contrib/contrib.hpp"
#include <vector>
#include <stdio.h>
#include <algorithm>
using namespace std;
using namespace cv;
struct Koordinat {
        int x;
        int y;
};
int main()
{
        int const r1 = 50, r2 = 73, r3 = 15;
        std::vector<Koordinat> cember1, cember2, cember3;
 
        Mat image = imread("C:\\OpenCv2.4.6\\6.png");
 
        int ikiBoyutKarsilastirDizi[100][2] = {};
        int atlananKoordinatlar[100][2] = {};
        cv::Vec3b pixelColor(255, 255, 0);
 
        //circle( image, Point( 385, 385 ), 100.0, Scalar( 0, 0, 255 ), 1, 8 );
        //circle(image, Point(385, 385), 100, Scalar(255, 0, 0), 1, 8, 0);
 
        Vec3b color2 = image.at<Vec3b>(Point(394, 378));
 
 
        for (int i = 0; i < image.cols; ++i) {  // row la sütunun yeri  yanlış olduğu için hesaplamalar yanlıs çıkıyor...
                for (int j = 0; j < image.rows; ++j) {
                       
                        Vec3b intensity = image.at<Vec3b>(j, i);
                        uchar blue = intensity.val[0];
                        uchar green = intensity.val[1];
                        uchar red = intensity.val[2];
                        //int b = int(image.at<cv::Vec3b>(i, j)[0]);
                        //int g = int(image.at<cv::Vec3b>(i, j)[1]);
                        //int r = int(image.at<cv::Vec3b>(i, j)[2]);
                        int x = 385, y = 385;
 
                        int cember_denklemi1;
                        int cember_denklemi2;
                        int cember_denklemi3;
                        //float cember_denklemi1, cember_denklemi2, cember_denklemi3;
                        ///**/
                        //cember_denklemi1 = sqrt((i - x)*(i - x) + (j - y)*(j - y) - (r1*r1));
                        //cember_denklemi2 = sqrt((i - x)*(i - x) + (j - y)*(j - y) - (r2*r2));
                        //cember_denklemi3 = sqrt((i - x)*(i - x) + (j - y)*(j - y) - (r3*r3));
 
                        cember_denklemi1 =  (i - x)*(i - x) + (j - y)*(j - y) - (r1*r1);
                          cember_denklemi2 = (i - x)*(i - x) + (j - y)*(j - y) - (r2*r2);
                        cember_denklemi3 = (i - x)*(i - x) + (j - y)*(j - y) - (r3*r3);
                        int sayac = 0;
 
               
                        if (cember_denklemi1 >=0 && cember_denklemi1 <=300&&(blue&&red&&green>0))
                        {
                               
                               
                                image.at<Vec3b>(Point(i, j)) = pixelColor;
                               
               
 
                               
                                //Vec3b color = image.at<Vec3b>(Point(i, j));
                                cout << "gelen koordinat : " << i << " " << j << endl;
                                if (ikiBoyutKarsilastirDizi[0][0] == 0)
                                        //eğer dizinin içi boş ise vektörü ata. i ve j yi göster.
                                {
                                        ikiBoyutKarsilastirDizi[0][0] = i;
                                        ikiBoyutKarsilastirDizi[0][1] = j;
                                        cout << "KIRMIZI" << i << " " << j << endl;
                       
                                //      image.at<Vec3b>(Point(i, j)) = color2;
                                }
                                else
                                {
                                        for (int z = 0; z<100; z++)//dizinin büyüklüğü 100 olduğu için.
                                        {
                                                if (ikiBoyutKarsilastirDizi[z][0] != 0 && ikiBoyutKarsilastirDizi[z][1] != 0)
                                                {
                                                       
/* 287 365 yüzünden and or oldu */if (abs(ikiBoyutKarsilastirDizi[z][0] - i) >= 5 || abs(ikiBoyutKarsilastirDizi[z][1] - j) >= 5) // eğer daha önce diziye atanmış vektörün x ve y'si yeni eklenmeye çalışan vektörün x ve y' sinden 5 fazla yada eksik mi kontrolü. abs'ın amacı -3 yada -2 çıkma durumunda olayı kurtarmak.
                                                        {
                                                               
                                                                sayac = z;
                                                       
                                                        }
                                                        else
                                                        {
                                                               
                                                                sayac = -1;
                                                                break;
                                                        }
                                                }
                                        }
                                       
                                        if (sayac != -1)
                                        {
                                               
                                                ikiBoyutKarsilastirDizi[sayac + 1][0] = i;
                                                ikiBoyutKarsilastirDizi[sayac + 1][1] = j;
                                                cout << "KIRMIZI" << i << " " << j << endl;
                                       
                                        }
                                        else //atlanan koordinat buraya düşecek.
                                        {
                                                cout << "atlanan koordinat: " <<i << " " << j << endl;
                                               
                                        }
 
                                }
                        }
                        int sayac2=0;
                         if (cember_denklemi2 >=0 && cember_denklemi2 <=300&&(blue&&red&&green>0))
                        {
                               
                               
                                image.at<Vec3b>(Point(i, j)) = pixelColor;
                               
               
 
                               
                                //Vec3b color = image.at<Vec3b>(Point(i, j));
                                cout << "gelen koordinat1 : " << i << " " << j << endl;
                                if (ikiBoyutKarsilastirDizi[0][0] == 0)
                                        //eğer dizinin içi boş ise vektörü ata. i ve j yi göster.
                                {
                                        ikiBoyutKarsilastirDizi[0][0] = i;
                                        ikiBoyutKarsilastirDizi[0][1] = j;
                                        cout << "BUYUK" << i << " " << j << endl;
                       
                                //      image.at<Vec3b>(Point(i, j)) = color2;
                                }
                                else
                                {
                                        for (int z = 0; z<100; z++)//dizinin büyüklüğü 100 olduğu için.
                                        {//0 0 geldiğinde 5 ten büyük gözüktüğü için dahil ediyor 0'lar için özel bir şey lazım.
                                                if (ikiBoyutKarsilastirDizi[z][0] != 0 && ikiBoyutKarsilastirDizi[z][1] != 0) // birinci yada ikinci değer 0 değilse aramaya devam et.
                                                {
                                                       
/* 287 365 yüzünden and or oldu */if (abs(ikiBoyutKarsilastirDizi[z][0] - i) >= 5 || abs(ikiBoyutKarsilastirDizi[z][1] - j) >= 5)
                                                        {
                                                               
                                                               
                                                                sayac2 = z;
                                                       
                                                        }
                                                        else
                                                        {
                                                               
                                                                sayac2 = -1;
                                                                break;
                                                        }
                                                }
                                        }
                                        //bütün değerlerin kontrolü yapıldıktan sonra eleman eklenmeli ve gösterilmeli.
                                        if (sayac2 != -1)
                                        {
                                               
                                                ikiBoyutKarsilastirDizi[sayac2 + 1][0] = i;
                                                ikiBoyutKarsilastirDizi[sayac2 + 1][1] = j;
                                                cout << "BUYUK" << i << " " << j << endl;
                                       
                                        }
                                        else //atlanan koordinat buraya düşecek.
                                        {
                                                cout << "atlanan koordinat1: " <<i << " " << j << endl;
                                               
                                        }
 
                                }
                        }
                        int sayac3=0;
                       
                        if (cember_denklemi3 >=0 && cember_denklemi3 <=300&&(blue&&red&&green>0))
                        {
                               
                               
                                image.at<Vec3b>(Point(i, j)) = pixelColor;
                               
               
 
                               
                                //Vec3b color = image.at<Vec3b>(Point(i, j));
                                cout << "gelen koordinat2 : " << i << " " << j << endl;
                                if (ikiBoyutKarsilastirDizi[0][0] == 0)
                                        //eğer dizinin içi boş ise vektörü ata. i ve j yi göster.
                                {
                                        ikiBoyutKarsilastirDizi[0][0] = i;
                                        ikiBoyutKarsilastirDizi[0][1] = j;
                                        cout << "KUCUK" << i << " " << j << endl;
                       
                                //      image.at<Vec3b>(Point(i, j)) = color2;
                                }
                                else //dizinin ilk elemanı atanmış ise karşılaştırma yap 5 fark kuralına uygunsa diziye ekle, uygun değilse vektörü atla. Atladıysan vektörü gösterme atlamadıysan vektörü göster.
                                {
                                        for (int z = 0; z<100; z++)//dizinin büyüklüğü 100 olduğu için.
                                        {//0 0 geldiğinde 5 ten büyük gözüktüğü için dahil ediyor 0'lar için özel bir şey lazım.
                                                if (ikiBoyutKarsilastirDizi[z][0] != 0 && ikiBoyutKarsilastirDizi[z][1] != 0) // birinci yada ikinci değer 0 değilse aramaya devam et.
                                                {
                                                       
/* 287 365 yüzünden and or oldu */if (abs(ikiBoyutKarsilastirDizi[z][0] - i) >= 5 || abs(ikiBoyutKarsilastirDizi[z][1] - j) >= 5) // eğer daha önce diziye atanmış vektörün x ve y'si yeni eklenmeye çalışan vektörün x ve y' sinden 5 fazla yada eksik mi kontrolü. abs'ın amacı -3 yada -2 çıkma durumunda olayı kurtarmak.
                                                        {// Doğruysa,atlamadığımız için karşılaştırma dizisine ata,göster.
                                                                //sürekli olarak 1'e yada 0 a kaydediyor dizideki ilk 0 indisini bul demek lazım.iptal kontrolü dışarı çıkar.
                                                               
                                                                sayac3 = z;
                                                       
                                                        }
                                                        else
                                                        {
                                                               
                                                                sayac3 = -1;
                                                                break;
                                                        }
                                                }
                                        }
                                        //bütün değerlerin kontrolü yapıldıktan sonra eleman eklenmeli ve gösterilmeli.
                                        if (sayac3 != -1)
                                        {
                                               
                                                ikiBoyutKarsilastirDizi[sayac3 + 1][0] = i;
                                                ikiBoyutKarsilastirDizi[sayac3 + 1][1] = j;
                                                cout << "KUCUK" << i << " " << j << endl;
                                       
                                        }
                                        else //atlanan koordinat buraya düşecek.
                                        {
                                                cout << "atlanan koordinat2: " <<i << " " << j << endl;
                                               
                                        }
 
                                }
                        }
                       
                }
        }
        imshow("Image", image);
        int k = waitKey();
           imwrite("5.jpg", image);
        //waitKey( 0 );
        return(0);
}

Dön C#.Net, J#.Net, Vb.Net, Asp.Net

Kimler çevrimiçi

Bu forumu gezen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 1 misafir