C/C++에서 이미지 파일을 읽어야합니다. 어떤 사람이 나를 위해 코드를 게시 할 수 있다면 매우 좋을 것입니다.C/C++에서 이미지 파일 읽기
나는 그레이 스케일 이미지에서 작동하며 이미지는 JPEG입니다. 이미지를 2D 배열로 읽어 내 작업을 쉽게하고 싶습니다. 사전
C/C++에서 이미지 파일을 읽어야합니다. 어떤 사람이 나를 위해 코드를 게시 할 수 있다면 매우 좋을 것입니다.C/C++에서 이미지 파일 읽기
나는 그레이 스케일 이미지에서 작동하며 이미지는 JPEG입니다. 이미지를 2D 배열로 읽어 내 작업을 쉽게하고 싶습니다. 사전
JPEG format을보고 나만의 글을 쓸 수 있습니다.
그런데 CImg 또는 Boost's GIL과 같은 기존 라이브러리를 사용해보십시오. 또는 JPEG의 경우 정확히 libjpeg입니다. CodeProject에도 CxImage 클래스가 있습니다.
여기는 big list입니다.
Magick++ API ~ ImageMagick을 확인하십시오.
corona입니다. 튜토리얼에서 :
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++;
}
픽셀은 한 차원 배열이 될 것입니다,하지만 당신은 쉽게 1D 배열 위치에 주어진 x와 y 위치를 변환 할 수 있습니다. POS = (y를 * 폭)처럼 뭔가 + X
체크 아웃 인텔 열기 CV 라이브러리 ...
확인이 스레드 아웃 : read and write image file.
또한 this other question at Stackoverflow을 살펴보십시오.
libpng/libjpeg 종속성이없는 최소한의 방법을 사용하기로 결정한 경우 stb_image
과 stb_image_write
(here)을 사용하는 것이 좋습니다.
간단히 말해서 헤더 파일 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;
}
을 그리고 여기에 이미지 작성하는 코드이다 :
g++ main.cpp
:
#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;
}
당신은 플래그 또는 의존성없이 컴파일 할 수 있습니다
다른 경량 대체품은 다음과 같습니다.
컴파일 할 때 math.h 라이브러리를 포함하고 링크해야했습니다 (http://stackoverflow.com/questions/8671366/undefined-reference-to-pow-and-floor). 또는 정의되지 않은 참조를 얻을 것입니다. 이미지 라이브러리 –
예를 들어 알 수 있겠지만 마법 번호 3이 코드에서 의미하는 바를 명확히 할 수 있습니까? – mattshu
@mattshu 채널 수 (빨강, 녹색, 파랑)입니다. 코드에서이를 분명히해야합니다. 편집을하겠습니다. –
libjpeg의 문서인가 (http://www.ijg.org/) 또는 읽기 및 쓰기 PNG 파일
질문 한 세 가지 질문에 대한 정답을 선택하는 것을 잊지 마십시오. – mwcz