Kamera képét hogyan tudnám megkapni egy tömbben C# - ben?
Ha így megfelel, találtam egy Projektet egy másik fórumon, ahol valaki hasonló webkamerakezelőt írt C#-ban. Nem néztem át komolyabban a működési elvét, nézegesd ha érdekel:
Hááát.... Ez szép és jó csak nem tömbben kapja vissza az ember, meg nem működik...
De azért köszönöm a választ
Sehogy.
Illetve biztos meg lehet írni egy ilyen eszközt, csak túl sok értelmét nem látom.
Elsőnek nyelvfüggetlenül szagolj bele a képfeldolgozás rendkívül széles szakirodalmába, és utána tudsz gondolkozni rajta.
A tömbös téma azért esélytelen, mert a legkisebb zavar is színváltozást fog okozni, vagy egy árnyék is színváltozást eredményez. Per-pixel összehasonlításban sosem állapítod meg, hogy valóban történt-e változás, vagy sem.
De, ismétlem: ennek a témának nagyon komoly szakirodalma van, nem egy pár mondatban megválaszolható téma.
Igen a tömbös megoldásban egy pixel is elváltozást okozna, de számolnám az elváltozásokat, és beálítanék egy tűréshatárt!
PL.: van egy tömbünk az 1,1,1. helyen ez van benne [234,12,57] és az alap képben ez van: [123 , 56 , 123] akkor kivonnám a második tömbből az elsőt, ha negatív a szám akkor pozitívvá változtatnám és megnézném mennyi a különbség, ha ez egy meggadott számnál nagyobb akkor növelném az elváltozásokat, és ha az elváltozások is nagyobbak egy megadott számnál akkor bizony mozgás van :D
Ez nem ennyire egyszerű.
Igen fontos a hatékonyság, ez meg olyan lassú lenne, hogy semmire se lenne jó.
Ez ennél jóval bonyolultabb téma, olvass utána, ha érdekel, de ez nem 2 hónapnyi programozás után fog menni.
A legfontosabb kérdés, hogy milyen formátumú a kép? Ha jól tudom a jpg cos transzformációt alkalmaz...ezt egyelőre felejtsd el. Na de ha bmp-t használnál akkor ami nem kódolja a képet akkor megnézheted a szerkezetét:
És ha a c++-t át tudod alakítani c#-á akkor itt a kód is:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream ifs;
ofstream ofs;
unsigned long width, height, tmorites, paletteColors;
unsigned short colordepth;
ofs.open("output.txt");
ifs.open("test.bmp");
ifs.ignore(18);
ifs.read((char*)&width, 4);
ifs.read((char*)&height, 4);
ifs.ignore(2);
ifs.read((char*)&colordepth, 2);
ifs.read((char*)&tmorites, 4);
ifs.ignore(12);
ifs.read((char*)&paletteColors, 4);
ifs.ignore(4);
unsigned char a;
int i = 0;
int j = 1;
int s = 0;
s = (width * 3) % 4;
if(paletteColors == 0)
{
while(ifs >> a)
{
i++;
if(s == 0)
{
if(j < 4)
{
ofs<<(int)a<<" ";
j++;
}
else
{
ofs<<" "<<(int)a<<" ";
j = 2;
}
if(i % width == 0)
ofs<<endl;
}
if(s != 0)
{
if(i % (width * 3) == 0)
{
ofs<<endl;
ifs.ignore(s);
continue;
}
if(j < 4)
{
ofs<<(int)a<<" ";
j++;
}
else
{
ofs<<" "<<(int)a<<" ";
j = 2;
}
}
}
}
ifs.close();
cout<<endl<<"I: "<<i<<endl<<"J: "<<j<<endl;
system("pause");
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!