S i V wycinka
-
- Użytkownik
- Posty: 64
- Rejestracja: 17 kwie 2005, o 10:51
- Płeć: Mężczyzna
- Lokalizacja: Rzeszów
- Podziękował: 3 razy
S i V wycinka
Witanko.
Ok wiec zaczijmy od nowa. Załużmy, że nie mam żadnego programu, który już coś tam.
Chciałbym zrobić program, który
1.Wczytuje dowolny obraz
2. Na tym obrazie możemy zaznaczyć pewien obszar
3. Za pomocą procedury floodfill wycinamy ten pewien obszar i go np kolorujemy na kolor biały.
4. Najważniejsza część programu. Wyliczamy pole powierzchni tej części białej.
Może w ten sposób mi pomożecie - byłbym wdzieczny bo to dla mnie bardzo ważna a nie mma pojęcia jak wyliczyć pole powierzchni tego wycinka
Ok wiec zaczijmy od nowa. Załużmy, że nie mam żadnego programu, który już coś tam.
Chciałbym zrobić program, który
1.Wczytuje dowolny obraz
2. Na tym obrazie możemy zaznaczyć pewien obszar
3. Za pomocą procedury floodfill wycinamy ten pewien obszar i go np kolorujemy na kolor biały.
4. Najważniejsza część programu. Wyliczamy pole powierzchni tej części białej.
Może w ten sposób mi pomożecie - byłbym wdzieczny bo to dla mnie bardzo ważna a nie mma pojęcia jak wyliczyć pole powierzchni tego wycinka
Ostatnio zmieniony 2 sty 2006, o 17:24 przez marsoft, łącznie zmieniany 2 razy.
-
- Użytkownik
- Posty: 953
- Rejestracja: 27 wrz 2005, o 22:56
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 11 razy
- Pomógł: 74 razy
S i V wycinka
W DirectX takich dziwactw nie znajdziesz.
Mapa bitowa to dwuwymiarowa tablica kolorów,
zatem zdefiniuj, czym jest to pole powierzchni i objętość.
Mapa bitowa to dwuwymiarowa tablica kolorów,
zatem zdefiniuj, czym jest to pole powierzchni i objętość.
-
- Użytkownik
- Posty: 64
- Rejestracja: 17 kwie 2005, o 10:51
- Płeć: Mężczyzna
- Lokalizacja: Rzeszów
- Podziękował: 3 razy
S i V wycinka
Już tłumaczę. Wczytujemy jakiś tam obrazek. W nim sobie wycinamy pewien obszar za pomocą obrysowania, tak jakby lasso - w każdym bądź razie gdy już sobie wytniemy a raczej zaznaczym pewien obszar to liczymy jego V i S. Mogę Tobie podesłać całość tego programu Liczy z dużą dokładnością ale długo, bo pixel po pixelu. Moje gg 5862305Fibik pisze:W DirectX takich dziwactw nie znajdziesz.
-
- Użytkownik
- Posty: 953
- Rejestracja: 27 wrz 2005, o 22:56
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 11 razy
- Pomógł: 74 razy
S i V wycinka
Zatem, to S jest powierzchnią zaznaczonego obszaru - a to jest, po prostu liczba punktów w tym obszarze (z konturem, albo bez?).
Takie coś można obliczyć przechodząc jedynie wzdłuż konturu - proste sumowanie po krzywej (tu po łamanej).
Nadal nie wiem czym jest ta objętość: V.
Taki brzydki algorytm nie jest mi potrzebny - aż strach na to patrzeć.
Takie coś można obliczyć przechodząc jedynie wzdłuż konturu - proste sumowanie po krzywej (tu po łamanej).
Nadal nie wiem czym jest ta objętość: V.
Taki brzydki algorytm nie jest mi potrzebny - aż strach na to patrzeć.
-
- Użytkownik
- Posty: 64
- Rejestracja: 17 kwie 2005, o 10:51
- Płeć: Mężczyzna
- Lokalizacja: Rzeszów
- Podziękował: 3 razy
S i V wycinka
Sęk w tym, że wiesz - ten kod mam a raczej całe źródło programu z właśnie dziwnym algorytmem, który chciałbym zrobić jakoś prościej i poprawić bo takie mam zadanie i zastanawiam się jak to zrobić aby to chodziło szybciej Program jakoś przlicza tą ilość pixeli na jakieś okręgi i z tego wylicza pole powierzchni i objętość - zresztą patrz na algorytm. Może masz inny pomysł. Na innym formu koleś coś mówi o całkach ale jak....hmm
-
- Użytkownik
- Posty: 953
- Rejestracja: 27 wrz 2005, o 22:56
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 11 razy
- Pomógł: 74 razy
S i V wycinka
Wstaw tu ten kod, ale jako kod, a nie jak zwykły tekst:
Kod: Zaznacz cały
tutaj paskal
begin
7 := x;
end.
-
- Użytkownik
- Posty: 953
- Rejestracja: 27 wrz 2005, o 22:56
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 11 razy
- Pomógł: 74 razy
S i V wycinka
Skoro nie potrafisz umieścić tekstu tej procedury jak należy, ani nawet nie wiesz co ona robi - to fruwaj sobie swobodnie w tej niewiedzy i nie zawracaj gitary.
-
- Użytkownik
- Posty: 1179
- Rejestracja: 21 cze 2004, o 00:51
- Płeć: Mężczyzna
- Lokalizacja: krk
- Pomógł: 9 razy
S i V wycinka
marsoft, wez lepiej wyjasnij o co chodzi z ta objetoscia bitmapy... bo ja sie z trojwymiarowymi bitmapami nie spotkalem
-
- Użytkownik
- Posty: 64
- Rejestracja: 17 kwie 2005, o 10:51
- Płeć: Mężczyzna
- Lokalizacja: Rzeszów
- Podziękował: 3 razy
S i V wycinka
marshal pisze:marsoft, wez lepiej wyjasnij o co chodzi z ta objetoscia bitmapy... bo ja sie z trojwymiarowymi bitmapami nie spotkalem
Ok wiec zaczijmy od nowa. Załużmy, że nie mam żadnego programu, który już coś tam.
Chciałbym zrobić program, który
1.Wczytuje dowolny obraz
2. Na tym obrazie możemy zaznaczyć pewien obszar
3. Za pomocą procedury floodfill wycinamy ten pewien obszar i go np kolorujemy na kolor biały.
4. Najważniejsza część programu. Wyliczamy pole powierzchni tej części białej.
Może w ten sposób mi pomożecie - byłbym wdzieczny bo to dla mnie bardzo ważna a nie mma pojęcia jak wyliczyć pole powierzchni tego wycinka
eh....
-
- Użytkownik
- Posty: 953
- Rejestracja: 27 wrz 2005, o 22:56
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 11 razy
- Pomógł: 74 razy
S i V wycinka
Biegniesz wzdłuż konturu i całkujesz - taka prosta wersja wzoru Greena.
Tak na chama, to możesz przelecieć kolejno wszystkie piksele i policzyć białe.
[/code]
Tak na chama, to możesz przelecieć kolejno wszystkie piksele i policzyć białe.
Kod: Zaznacz cały
sumek = 0;
for(y = 0; i < h; y++ )
{
scanline = bitmapek.scanline[y];
for(int x = 0; x < w; x++ )
if( scanline[x] == biały ) sumek++;
}
Pole = sumek * polePixela;
-
- Użytkownik
- Posty: 64
- Rejestracja: 17 kwie 2005, o 10:51
- Płeć: Mężczyzna
- Lokalizacja: Rzeszów
- Podziękował: 3 razy
S i V wycinka
hmm....a co wziąźć za pole pixela? hmm.... gdy mam sume punktow to wg Ciebie wystarczy je pomnozyc przez pole pixela i to da pole całości? Jeśli tak to byłbym w domu choć sam podpowiedz jeszcze z tym pixelem o co chodzi?
-
- Użytkownik
- Posty: 953
- Rejestracja: 27 wrz 2005, o 22:56
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 11 razy
- Pomógł: 74 razy
S i V wycinka
To nie jest problem.
Użytkownik podaje wielkość piksela: w i h, wtedy: sPixel = w*h,
albo tylko zakładamy, że w=h i czytamy jeden wymiar: sPixel = d*d.
Z ekranu też można policzyć:
Pole ekranu w mm^2: sEkran = screen_sizex*sereen_sizey;
liczba pixeli na ekranie: npix = resX*resY
czyli pole jednego pixela w mm^2: sPix = sEkran/npix
Jeszcze skala: sPixSkalowany = sPix*skala*skala
--------
GetDeviceCaps(hdc, param)
param:
HORZSIZE Width, in millimeters, of the physical screen.
VERTSIZE Height, in millimeters, of the physical screen.
HORZRES Width, in pixels, of the screen.
VERTRES Height, in raster lines, of the screen.
np. szerokość w mm:
wmm = GetDeviceCaps(hdc, HORZSIZE);
to hdc w delfinie to Handle ze Screen = Canvas dla całego ekranu
Użytkownik podaje wielkość piksela: w i h, wtedy: sPixel = w*h,
albo tylko zakładamy, że w=h i czytamy jeden wymiar: sPixel = d*d.
Z ekranu też można policzyć:
Pole ekranu w mm^2: sEkran = screen_sizex*sereen_sizey;
liczba pixeli na ekranie: npix = resX*resY
czyli pole jednego pixela w mm^2: sPix = sEkran/npix
Jeszcze skala: sPixSkalowany = sPix*skala*skala
--------
GetDeviceCaps(hdc, param)
param:
HORZSIZE Width, in millimeters, of the physical screen.
VERTSIZE Height, in millimeters, of the physical screen.
HORZRES Width, in pixels, of the screen.
VERTRES Height, in raster lines, of the screen.
np. szerokość w mm:
wmm = GetDeviceCaps(hdc, HORZSIZE);
to hdc w delfinie to Handle ze Screen = Canvas dla całego ekranu
-
- Użytkownik
- Posty: 64
- Rejestracja: 17 kwie 2005, o 10:51
- Płeć: Mężczyzna
- Lokalizacja: Rzeszów
- Podziękował: 3 razy
S i V wycinka
hmm... np
//pole powierzchni monitora pix
xMM := GetDeviceCaps(deskDC,HORZSIZE); 320mm
yMM := GetDeviceCaps(deskDC,VERTSIZE); 240mm
sEkran:= xMM*yMM; 76800mm^2
//liczba pixeli na ekranie przy rozdzielczości 1024x768
npix:= yPix*xPix; 786432 n
//pole jednego pixela
sPix:= sEkran/npix; 0,09765625 mm^2
gdzie wykorzystać sPixelSkalowanie?? i do czego? bo mam rozumieć że to jest DPI.
Jakaś tam wartość wyszła dosyć mała ale czy rzeczywista? Zapewne trzeba jeszcze gdzieś upakować to skalowanie - podpowiedz gdzie i jak, bo jakies głupoty wyszły jeśli to pomnożyłem przez DPI
//po skalowaniu
sPixSkala:=sPix*sX*sY; 900mm^2
[ Dodano: Czw Sty 05, 2006 2:19 am ]
//pole powierzchni monitora pix
xMM := GetDeviceCaps(deskDC,HORZSIZE); 320mm
yMM := GetDeviceCaps(deskDC,VERTSIZE); 240mm
sEkran:= xMM*yMM; 76800mm^2
//liczba pixeli na ekranie przy rozdzielczości 1024x768
npix:= yPix*xPix; 786432 n
//pole jednego pixela
sPix:= sEkran/npix; 0,09765625 mm^2
gdzie wykorzystać sPixelSkalowanie?? i do czego? bo mam rozumieć że to jest DPI.
Jakaś tam wartość wyszła dosyć mała ale czy rzeczywista? Zapewne trzeba jeszcze gdzieś upakować to skalowanie - podpowiedz gdzie i jak, bo jakies głupoty wyszły jeśli to pomnożyłem przez DPI
//po skalowaniu
sPixSkala:=sPix*sX*sY; 900mm^2
[ Dodano: Czw Sty 05, 2006 2:19 am ]
Narysowałem w photoshop obrazek 5x5 cm i sprawdziłem pole powierzchni. Powinno wyjść 250mm tyle niestety nie wychodzi. Dobrałem natomiast tak pole powierzchni pixela aby tyle wyszło jest to w przybliżeniu 0.012 mm^2 Mi jak już pisałem wyżej wychodzi 0,09765625 mm^2 czyli coś jest nie takmarsoft pisze:hmm... np
//pole powierzchni monitora pix
xMM := GetDeviceCaps(deskDC,HORZSIZE); 320mm
yMM := GetDeviceCaps(deskDC,VERTSIZE); 240mm
sEkran:= xMM*yMM; 76800mm^2
//liczba pixeli na ekranie przy rozdzielczości 1024x768
npix:= yPix*xPix; 786432 n
//pole jednego pixela
sPix:= sEkran/npix; 0,09765625 mm^2
gdzie wykorzystać sPixelSkalowanie?? i do czego? bo mam rozumieć że to jest DPI.
Jakaś tam wartość wyszła dosyć mała ale czy rzeczywista? Zapewne trzeba jeszcze gdzieś upakować to skalowanie - podpowiedz gdzie i jak, bo jakies głupoty wyszły jeśli to pomnożyłem przez DPI
//po skalowaniu
sPixSkala:=sPix*sX*sY; 900mm^2
-
- Użytkownik
- Posty: 953
- Rejestracja: 27 wrz 2005, o 22:56
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 11 razy
- Pomógł: 74 razy
S i V wycinka
Może w tej szopie wyszło 0.12 nie 0.012 (prawie 100 pixeli w mm2)-> na ekranie są cale logiczne: calLog = cal*96/72
96/cal -> 96/25.4 = 3.78 punktów/mm policz sobie ile zmieści się w mm2.
Nie wiem co tam za dpi stosujesz - rozdzielczość to wymiar/liczbapixeli, a przecież tak robimy - więc na cholerę nam jakieś inne dpi ma się jeszcze tu plątać.
------------
Poprzednia metoda jest zależna od rozdzielczości ekranu, zatem robimy inaczej.
User podaje tylko skalę.
My operujemy na calach logicznych: dpi = LogPixels (zawsze 96 dla ekranu)
Liczymy wymiary 1 punktu:
dx = dy = 25.4/dpi [mm]
Ostateczne pole piksela: sPixFinal = dx*dy * skala^2 [mm2]
skala jest to taka rzecz, że skala jest taka: 1 : skala
96/cal -> 96/25.4 = 3.78 punktów/mm policz sobie ile zmieści się w mm2.
Nie wiem co tam za dpi stosujesz - rozdzielczość to wymiar/liczbapixeli, a przecież tak robimy - więc na cholerę nam jakieś inne dpi ma się jeszcze tu plątać.
------------
Poprzednia metoda jest zależna od rozdzielczości ekranu, zatem robimy inaczej.
User podaje tylko skalę.
My operujemy na calach logicznych: dpi = LogPixels (zawsze 96 dla ekranu)
Liczymy wymiary 1 punktu:
dx = dy = 25.4/dpi [mm]
Ostateczne pole piksela: sPixFinal = dx*dy * skala^2 [mm2]
skala jest to taka rzecz, że skala jest taka: 1 : skala