C/C++で画像ファイルを読み取る必要があります。誰かが私のためにコードを投稿できるなら、それは非常に素晴らしいでしょう。
私はグレースケール画像で作業しており、画像はJPEGです。画像を2D配列に読み込んで、作業を簡単にします。
Libpng/libjpegに依存せずに最小限のアプローチを選択する場合は、stb_image
およびstb_image_write
、見つかった ここ 。
取得するのは簡単です。ヘッダーファイルを配置するだけで_stb_image.h
およびstb_image_write.h
フォルダー内。
画像を読み取るために必要なコードは次のとおりです。
#include <stdint.h>
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
int main() {
int width, height, bpp;
uint8_t* rgb_image = stbi_load("image.png", &width, &height, &bpp, 3);
stbi_image_free(rgb_image);
return 0;
}
そして、ここに画像を書くコードがあります:
#include <stdint.h>
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"
#define CHANNEL_NUM 3
int main() {
int width = 800;
int height = 800;
uint8_t* rgb_image;
rgb_image = malloc(width*height*CHANNEL_NUM);
// Write your code to populate rgb_image here
stbi_write_png("image.png", width, height, CHANNEL_NUM, rgb_image, width*CHANNEL_NUM);
return 0;
}
フラグや依存関係なしでコンパイルできます:
g++ main.cpp
その他の軽量の代替手段は次のとおりです。
チェックアウトIntel Open CV library ...
このスレッドを確認してください: イメージファイルの読み取りと書き込み 。
また、 Stackoverflowでのこの他の質問 もご覧ください。
コロナ はいいですね。チュートリアルから:
corona::Image* image = corona::OpenImage("img.jpg", corona::PF_R8G8B8A8);
if (!image) {
// error!
}
int width = image->getWidth();
int height = image->getHeight();
void* pixels = image->getPixels();
// we're guaranteed that the first eight bits of every pixel is red,
// the next eight bits is green, and so on...
typedef unsigned char byte;
byte* p = (byte*)pixels;
for (int i = 0; i < width * height; ++i) {
byte red = *p++;
byte green = *p++;
byte blue = *p++;
byte alpha = *p++;
}
ピクセルは1次元配列ですが、指定されたxおよびy位置を1D配列の位置に簡単に変換できます。 pos =(y * width)+ xのようなもの
Magick ++ API を ImageMagick にチェックアウトします。