0

私はソフトウェアエンジニアではありません。質問がぎこちなくてすみません。

メモリ効率が良くないが、プレーンCで簡単に操作できる画像形式が欲しいのですが、具体的には、すべてのピクセルを次の形式の配列に格納したいと思います。

ピクセル[行#] [列#][色]

ここで、インデックスの行番号と列番号(最大で255)は座標であり、インデックスカラー(最大で2)には、位置で指定されたピクセルのRGB値が含まれます(つまり、 pixel [255] [255][1]が使用されます)。右下隅のピクセル内の緑の量を確認または操作します)。

ロボットアプリケーションでこのフォームを使用して、「ネストされたforループ」を使用して左上隅から画像をスキャンすることで、最初の赤/青/緑のピクセルの座標を簡単に見つけられるようにすることを目指しています(はい、創造的な解決策ではありません)。ここで、画像に白い領域がある場合、コードは間違った座標で返されると言うかもしれません。私はこの事実を知っていますが、画像は複雑なパターンを持たず、(必要に応じて)無関係な色を黒であるかのように保存できます。明るさ、ガンマ、アルファも気にしません。

それで、ウェブカメラからスナップショットを取得するC(または必須の場合はC ++)コードを記述して、たとえば0.5秒ごとにウェブカメラからの生の画像を上記の形式に変換することは可能ですか?Cがカメラに直接到達できないと言う場合、カメラに到達できるソフトウェアを要求するコードを記述し、スナップショットを取り、生データをファイルに保存することは可能ですか?はいの場合、少なくとも変換を試すことができるように、Cコードを使用してこの生データファイルを読み取るにはどうすればよいですか?ラップトップでWindowsVistaを使用しています。

質問を長くして申し訳ありませんが、不明な点は残したくありません。

4

2 に答える 2

2

はい、そのようなファイル形式は可能です。正気のみが実装/使用を防ぎます。

ただし、かなり広く使用されている一部の形式は、検討している方法でスキャンするのとほぼ同じくらい簡単です。一例として、32 ビットの BMP には、画像のサイズ (x、y ピクセル寸法) の後に生のピクセル値が続くようないくつかのことを伝える小さなヘッダーがファイルにあるため、基本的には単なる ColorColorColor です...画像のピクセル数。

32 ビット BMP で話しているスキャンを実行するコードは非常に簡単です。ファイルを開き、データを読み取るためのバッファーにスペースを割り当てるなどのコードは、スキャン コードよりも簡単に長くなる可能性があります。自体。

于 2012-06-18T00:57:43.580 に答える
2

「標準」の画像形式を採用するということは、テスト データを生成し、結果を個別に表示するためのツールがあることも意味します。

純粋な C でコーディングするのが最も簡単なのは (あまり効率的ではありませんが)、移植可能な pixmap (ppm) です。

ただのプレーンテキストファイルです

P3 <cr>               # P3 means an ascii color file R,G,B
640 480 <cr>          # 640 pixels wide, 480 rows deep
255 <cr>              # maximum value is 255
# then just a row of RGB values separated by space with a CR 
255   0   0     0 255   0     0   0 255 #....... 640 triplets <cr> 
255 255   0   255 255 255     0   0   0  # ....... next row etc

データが純粋な RGB バイトである、より効果的なバイナリ バージョンもあるため、1 回の操作で C 配列に読み込むのは非常に簡単です。

于 2012-06-18T01:06:05.253 に答える