-
Notifications
You must be signed in to change notification settings - Fork 8
OpenCV jpeglib
eiichiromomma edited this page Aug 17, 2014
·
1 revision
(OpenCV) jpeglib
cvLoadImageを使わないでjpegの画像を開く
CLRのWindowsフォームアプリを作る際にhighguiを含むと面倒事が起きるので、jpegしか使わない場合に限定してjpeglibで済ませる。 (他の画像を含む場合はBitmap←→IplImageを使う)
Independent JPEG Group で配布されているライブラリを使用する。インストールや使い方はググれば出てくるのでパス。
jpeg_read_scanlinesでライン毎にスキャンする時にimageDataへコピーする。
while (cinfo.output_scanline < cinfo.output_height) {
jpeg_read_scanlines(&cinfo, buffer, 1);
memcpy(src->imageData + (cinfo.output_scanline-1)*src->widthStep,
buffer[0], row_stride);
}
※下のソースで示すrow_strideがwidthStepと必ず一致するかは確かめていないがBMPみたいな調整が入らなければ大丈夫な筈。
殆どjpeglibのサンプル。例によってエラー処理は省略。
#include <cv.h>
#include <highgui.h>
#include <jpeglib.h>
int main(int argc, char** argv)
{
IplImage* src;
#if 1
//cvLoadImageを使わずにjpeg画像からIplImageのimageDataへ収納する方法
FILE * infile;
//jpeglibのお約束
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
JSAMPARRAY buffer; /* Output row buffer */
int row_stride; /* physical row width in output buffer */
if ((infile = fopen(argv[1], "rb")) == NULL) {
return -1;
}
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
jpeg_stdio_src(&cinfo, infile);
jpeg_read_header(&cinfo, TRUE);
jpeg_start_decompress(&cinfo);
row_stride = cinfo.output_width * cinfo.output_components;
buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
//jpeglibのお約束ここまで
//cinfoから画像サイズを取得
src = cvCreateImage(cvSize(cinfo.image_width, cinfo.image_height), IPL_DEPTH_8U, cinfo.output_components);
int id=0;
//一行ずつ入れる
while (cinfo.output_scanline < cinfo.output_height) {
jpeg_read_scanlines(&cinfo, buffer, 1);
memcpy(src->imageData + (cinfo.output_scanline-1)*src->widthStep,
buffer[0], row_stride);
}
//bufferも開放してくれるらしい
jpeg_finish_decompress(&cinfo);
fclose(infile);
//RGBなのでBGRに直す
cvCvtColor(src,src,CV_RGB2BGR);
#else
src = cvLoadImage(argv[1], CV_LOAD_IMAGE_ANYCOLOR);
#endif
cvNamedWindow("src",CV_WINDOW_AUTOSIZE);
cvShowImage("src",src);
cvWaitKey(0);
cvReleaseImage(&src);
return 0;
}
- 3ds_max
- Android
- Books
- Caffe
- Canvas
- Chainer
- CloudCompare
- colinux
- colmap
- Cygwin
- DeepLearning
- DICOM
- dlib
- docker
- Everun
- Excel
- EyeX
- FANN
- FDS
- Felica
- FreeBSD
- FreeNAS
- GAlib
- gnuplot
- JetsonNano
- JetsonTK1
- JetsonTX2
- Kinect
- LAPACK
- LaTeX
- LTspice
- M5Stack
- MacOSX
- MATLAB
- Memo
- MicroEnableIII
- Mono
- MSVC
- nano
- nvidia-docker
- ODE
- Open3D
- OpenCV
- OpenCVSharp
- OpenMVG
- OpenOffice
- OpenVSLAM
- OSG
- ParaView
- PCL
- Phidgets
- PlaidML
- PLplot
- POVRay
- PowerPoint
- Python
- R
- RaspberryPi
- Realsense
- ROS
- RSJ2011
- Ruby
- Scilab
- SHOGUN
- SUSE
- SVM
- Tensorflow
- TrueCrypt
- Ubuntu
- uEye
- Unix
- VMWarePlayer
- Vim
- VTK
- Windows
- WSL2
- 文書作成
- 文献調査
- 立体映像
- 論文メモ