그래서 웹 페이지 API를 사용하여 이미지를 인코딩하려고합니다. 지금은 이미지를 열고 조작하기 위해 openCV를 사용하려고합니다. 그런 다음 webc로 저장하려고합니다. 내가 이것을 실행하면WebP 인코딩 - 분할 오류
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>
#include <webp/encode.h>
int main(int argc, char *argv[])
{
IplImage* img = 0;
int height,width,step,channels;
uchar *data;
int i,j,k;
if (argc<2) {
printf("Usage:main <image-file-name>\n\7");
exit(0);
}
// load an image
img=cvLoadImage(argv[1]);
if(!img){
printf("could not load image file: %s\n",argv[1]);
exit(0);
}
// get the image data
height = img->height;
width = img->width;
step = img->widthStep;
channels = img->nChannels;
data = (uchar *)img->imageData;
printf("processing a %dx%d image with %d channels \n", width, height, channels);
// create a window
cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
cvMoveWindow("mainWin",100,100);
// invert the image
for (i=0;i<height;i++) {
for (j=0;j<width;j++) {
for (k=0;k<channels;k++) {
data[i*step+j*channels+k] = 255-data[i*step+j*channels+k];
}
}
}
// show the image
cvShowImage("mainWin", img);
// wait for a key
cvWaitKey(0);
// release the image
cvReleaseImage(&img);
float qualityFactor = .9;
uint8_t** output;
FILE *opFile;
size_t datasize;
printf("encoding image\n");
datasize = WebPEncodeRGB((uint8_t*)data,width,height,step,qualityFactor,output);
printf("writing file out\n");
opFile=fopen("output.webp","w");
fwrite(output,1,(int)datasize,opFile);
}
, 나는이 얻을 :
[email protected]:~/webp/webp_test$ ./helloWorld ~/Pictures/mars_sunrise.jpg
processing a 2486x1914 image with 3 channels
encoding image
Segmentation fault
그냥 좋은 이미지를 표시하지만 인코딩에 세그먼테이션 폴트 (segfault) 여기에 내가 사용하고 소스입니다. 내 초기 추측은 데이터를 작성하기 전에 img를 릴리스했기 때문에 인코딩을 시도하기 전이나 후에 릴리스할지 여부는 중요하지 않은 것 같습니다. 이 문제를 일으킬만한 다른 것이 있습니까? 이미지 데이터 등을 복사해야합니까?
WebP API 문서는 ... 희소식입니다.
The main encoding functions are available in the header src/webp/encode.h
The ready-to-use ones are:
size_t WebPEncodeRGB(const uint8_t* rgb, int width, int height,
int stride, float quality_factor, uint8_t** output);
워드 프로세서는 특히 '보폭'이 무엇인지 말을하지 않습니다,하지만 난 그것을 OpenCV의에서 '스텝'과 동일하다고 가정하고있어 다음은 README가 WebPEncodeRGB에 대한 말씀입니다. 그게 합리적입니까?
미리 감사드립니다.
+1 정확히 게시하려고했던 것입니다. – karlphillip
필자의 글에서 지적했듯이 "필자가 데이터를 작성하기 전에 img를 릴리스했기 때문에 처음에는 인코딩을 시도하기 전이나 후에 릴리스할지 여부가 중요하지 않았다. . " 나는 encode 후에 'release'를 움직이려고 시도했지만 정확히 같은 결과를 얻는다. –