
配列に格納したRGB値からPNG画像(またはBMP画像JPEG画像)を作成したいと思っているのですが、画像ファイルの作り方がわかりません。
ファイルを作成⇒ヘッダ書きこみ⇒色情報書き込み
と、漠然とした手順しかわかりません。
詳しい方法、または参考URLがわかる方、アドバイスお願いします。
以下補足です。
・開発環境はwindowsXPのVC7でC言語を使っています。
・openCVで適切な関数があれば助かります。
(openCVのIplImageの読み込みなども参考にしようと思いましたがxmlファイルからの取得とは違うのでわかりませんでした。)
No.1ベストアンサー
- 回答日時:
こんばんは。
openCVの、
・cvCreateImage関数で24bitのIPLを作成
・RGB配列をIPLのイメージ配列に転送
・cvSaveImage関数でファイル名の拡張子にjpgやpngを付ける
で狙い通りにセーブ出来るのではないでしょうか。以下参考程度に。
#include<cv.h>
#include<highgui.h>
#pragma comment(lib, "cv.lib")
#pragma comment(lib, "cxcore.lib")
#pragma comment(lib, "highgui.lib")
typedef unsigned char Byte;
const int WIDTH = 320;
const int HEIGHT= 240;
const int IMGSIZE = 320 * 240;
int main()
{
//rgbの配列
Byte R[IMGSIZE] = {0};
Byte G[IMGSIZE] = {0};
Byte B[IMGSIZE] = {0};
//緑色に塗り潰す
::memset(G, 0xff, IMGSIZE);
//24bitのiplを作成
IplImage* ipl = ::cvCreateImage(cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 3);
//iplのイメージ配列にrgbの配列を転送
for(int y = 0; y < ipl->height; ++y)
{
for(int x = 0; x < ipl->width; ++x)
{
const int dpos = (x * ipl->nChannels) + (ipl->widthStep * y);
const int spos = x + (WIDTH * y);
ipl->imageData[dpos] = B[spos];
ipl->imageData[dpos+1] = G[spos+1];
ipl->imageData[dpos+2] = R[spos+2];
}
}
//jpgでセーブ
::cvSaveImage("test.jpg", ipl);
//pngでセーブ
::cvSaveImage("test.png", ipl);
//iplの破棄
::cvReleaseImage(&ipl);
return 0;
}
回答ありがとうございますm(_ _)m
お礼が遅くなって申し訳ありません。
丁寧にアドバイスいただきありがたいです。
参考にさせていただきプログラムを作成したのですが
highgui.hが他のライブラリと競合してしまったようで
実行できませんでした。
現在解決策を検討中です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列をEraseしてもメモリが開放...
-
c++によるジャンケンプログラム
-
プログラムが書けません。
-
市販のビンゴカードについて
-
銀行ATMの数字キーの配列
-
【エクセルVBA】Functionの引数...
-
mallocの確保要素数の限界は?
-
C言語 配列の長さの上限
-
関数ポインタについて
-
ポインタに ~0を入れること
-
C言語を使って、ファイルの読み...
-
トリプルポインタが必須!とな...
-
デバイスハンドルとは?
-
構造体を型の異なる構造体に代入
-
CStringからchar*への型変換に...
-
fopne で失敗する原因
-
「#undef」と「#define」の使い...
-
Accessで、メモリを開放するタ...
-
System.IO.Directory.GetFiles...
-
関数ポインタの利点
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
配列を含む構造体の初期値について
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
【速いブラインドタッチ】手を...
-
テキストファイルから文字列を...
-
ExcelVBAで質問です。離れた二...
-
配列をEraseしてもメモリが開放...
-
メモリの初期値
-
複数の選択範囲の行番号を個別...
-
unsigned char配列への入力の仕方
-
【C言語】配列の中に配列を入れ...
-
VBで構造体の配列を関数に渡す...
-
エラ-メッセ-ジの意味を教え...
-
C# 配列の変数宣言について。
-
C言語 配列の再初期化
-
LGノートPCグラムについて
-
C言語初心者 構造体 課題について
おすすめ情報