1. 程式人生 > >android下將v4l2採集的yuv資料轉成jpg圖片

android下將v4l2採集的yuv資料轉成jpg圖片

int write_JPEG_file (constchar* filename,unsignedchar* yuvData,int quality,int image_width,int image_height) { LOG("write_JPEG_file 1 \n"); struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; FILE * outfile;// target file // JSAMPROW row_pointer[1]; // pointer to JSAMPLE row[s] // int row_stride; // physical row width in image buffer

JSAMPIMAGE buffer; unsignedchar*pSrc,*pDst; int band,i,buf_width[3],buf_height[3]; cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); if((outfile = fopen(filename,"wb"))== NULL){ fprintf(stderr,"can't open %s\n", filename); return-1; } LOG("write_JPEG_file 2 \n"
); jpeg_stdio_dest(&cinfo, outfile); cinfo.image_width = image_width;// image width and height, in pixels cinfo.image_height = image_height; cinfo.input_components =3;// # of color components per pixel cinfo.in_color_space = JCS_RGB;//colorspace of input image jpeg_set_defaults
(&cinfo); jpeg_set_quality(&cinfo, quality, TRUE ); ////////////////////////////// cinfo.raw_data_in = TRUE; cinfo.jpeg_color_space = JCS_YCbCr; cinfo.comp_info[0].h_samp_factor =2; cinfo.comp_info[0].v_samp_factor =2; ///////////////////////// jpeg_start_compress(&cinfo, TRUE); buffer =(JSAMPIMAGE)(*cinfo.mem->alloc_small)((j_common_ptr)&cinfo, JPOOL_IMAGE,3*sizeof(JSAMPARRAY)); for(band=0; band <3; band++) { buf_width[band]= cinfo.comp_info[band].width_in_blocks * DCTSIZE; buf_height[band]= cinfo.comp_info[band].v_samp_factor * DCTSIZE; buffer[band]=(*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo, JPOOL_IMAGE, buf_width[band], buf_height[band]); } unsignedchar*rawData[3]; rawData[0]=yuvData; rawData[1]=yuvData+image_width*image_height; rawData[2]=yuvData+image_width*image_height*5/4; int src_width[3],src_height[3]; for(i=0;i<3;i++) { src_width[i]=(i==0)?image_width:image_width/2; src_height[i]=(i==0)?image_height:image_height/2; } LOG("write_JPEG_file 3 \n"); //max_line一般為16,外迴圈每次處理16行資料。 int max_line = cinfo.max_v_samp_factor*DCTSIZE; int counter; for(counter=0; cinfo.next_scanline < cinfo.image_height; counter++) { //buffer image copy. for(band=0; band <3; band++)//每個分量分別處理 { int mem_size = src_width[band];//buf_width[band]; pDst =(unsignedchar*) buffer[band][0]; pSrc =(unsignedchar*) rawData[band]+ counter*buf_height[band] * src_width[band];//buf_width[band]; //yuv.data[band]分別表示YUV起始地址 for(i=0; i <buf_height[band]; i++)//處理每行資料 { memcpy(pDst, pSrc, mem_size); pSrc += src_width[band];//buf_width[band]; pDst += buf_width[band]; } } jpeg_write_raw_data(&cinfo, buffer, max_line); } jpeg_finish_compress(&cinfo); fclose(outfile); jpeg_destroy_compress(&cinfo); return0; }

相關推薦

androidv4l2採集yuv資料jpg圖片

int write_JPEG_file (constchar* filename,unsignedchar* yuvData,int quality,int image_width,int image_height) { LOG("write_JPEG_file 1 \n"); struct jpeg_

android平臺基於ffmpeg採集Camera資料編碼H.264推流到RTMP伺服器

音視訊實踐學習 android全平臺編譯ffmpeg以及x264與fdk-aac實踐 ubuntu下使用nginx和nginx-rtmp-module配置直播推流伺服器 android全平臺編譯ffmpeg合併為單個庫實踐 android-studio使用c

Android中攝像頭獲取的YUV資料Opencv的Mat

背景 在onPreviewFrame方法中獲取的byte[] data資料為420sp格式,排列順序為width*height個Y(亮度資訊,就是我們常見的灰度影象),後面是UV(顏色資訊),4個Y共享一個U和V,故byte陣列的總大小是width*height

ffmpegrgba資料png圖片

最近在做熱區圖分析,需要對視訊中的一些熱區資訊產生熱區圖,併疊加到視訊背景圖上,主要工作有兩部分: 1.分析熱區資料,生成rgba資料(本文暫時先不講具體實現); 2.用ffmepg將rgba資料生成png圖(主要講這部分內容); 具體實現程式碼如下: bool sav

mnist資料原始圖片資料TFRecord格式

1、將mnist資料轉成原始圖片資料 def convert_mnist_img(data, save_path): for i in range(data.images.shape[0]): img = data.images[i].reshape

蘋果的HEIC格式怎麼jpg圖片

  升級後的ios,圖片都變成了HEIC格式,因為這種圖片的格式在其他裝置中是無法開啟的,所以就必須需要將HEIC轉JPG格式才可以開啟,由於是剛升級沒多久,所以很多夥伴們還不是很瞭解如何操作的,不過沒關係,今天看完小編的這篇文章,相信你們會有所瞭解,希望看完之後可以有效的幫助到你們。   HEIC

整個pdf文件轉換jpg圖片的最快方法

  把PDF文件的內容轉成圖片檔案,如果直接通過截圖的方式來進行操作,那麼只能一頁一頁的截圖,這樣不僅慢,而且生成的圖片質量不高。若要進行快速的轉換,就必須將pdf檔案批量轉換成圖片,那怎樣能夠進行批量轉換呢?   可以在pdf轉圖片軟體中將文件內容直接批量輸出成圖片,開啟

Android camera2 回撥imagereader 從Image拿到YUV資料化成RGB,生成bitmap並儲存

ImageUtil.java import android.graphics.ImageFormat; import android.media.Image; import android.os.Build; import android.support.annotation.RequiresApi;

FFmpeg YUV資料RGB

只要開始初始化一次,結束後釋放就好,中間可以迴圈轉碼  AVFrame *m_pFrameRGB,*m_pFrameYUV; uint8_t *m_rgbBuffer,*m_yuvBuffer; struct SwsContext *m_img_convert_ctx; void i

從服務端接收到的資料JSON資料

第一步,從服務端接收資料,並將資料轉成int陣列。 try{ // 建立輸入流物件InputStream is = socket.getInputStream(); int length = is.a

cifar10資料圖片

#將cifar10轉成圖片 import numpy as np import matplotlib.image as plimg from PIL import Image import pickle as p def load_CIFAR_batch(filename):

mnist資料圖片

from tensorflow.examples.tutorials.mnist import input_data import scipy.misc import os # 注意儲存的路徑 mnist = input_data.read_data_sets("MNIST_DATA", o

mysql 如何查詢出來的資料化為0,1標識的狀態碼

前言:在某些情況下在查詢到密碼等關鍵資訊後,不希望直接傳給前端希望以狀態碼0,1的方式給出狀態。 例如:user表資料如下: user表資料 id gender login_pwd age name

prometheus採集資料遠端儲存到influxdb中

這個比較簡單, https://docs.influxdata.com/influxdb/v1.7/supported_protocols/prometheus 只需要更改prometheus.yaml配置 檔案。 global: # 抓取的間隔時間 scrap

BIGEMPA如何高程資料南方CASS的DAT格式

需要的工具 1. BIGEMPA地圖下載器(全能版已授權)   2. Global Mapper 14   第一步:將下載好的高程資料DEM直接拖到global mapper中(如何下載高程DEM?),如下圖所示:  

用python.h5檔案的資料化成.pcd檔案

import h5py import numpy as np import os import math from open3d import * filename = '/home/jp/project/pointnet/sem_seg/indoor3d_sem_seg_

如何高程資料南方CASS的DAT格式

釋出時間:2018-01-17 版權: 需要的工具 第一步:將下載好的高程資料DEM直接拖到global mapper中(如何下載高程DEM?),如下圖所示: 第二步:將DEM資料儲存為高程點的文字檔案,如下圖: 點選後,出現下圖:

android指定的程序/執行緒繫結到指定的CPU

針對平臺優化的APP,需要根據具體的CPU型號來將一些任務重,佔CPU資源多的執行緒繫結到CPU上處理能力更強的大核上,可參考如下程式碼: 1、將整個程序中的各個執行緒繫結到指定CPU核 #include <stdio.h> #include <stdlib.h> #

BIGEMAP 如何高程資料南方CASS的DAT格式

需要的工具 1. BIGEMPA地圖下載器(全能版已授權)  2. Global Mapper 14   第一步:將下載好的高程資料DEM直接拖到global mapper中如下圖所示:   第二步:將DEM資料儲存為高程點的文字

Flume kafka 中的資料存到 HDFS 中

flume1.8 kafka Channel + HDFS sink(without sources) 將 kafka 中的資料轉存到 HDFS 中, 用作離線計算, flume 已經幫我們實現了, 新增配置檔案, 直接啟動 flume-ng 即可. The Kafka channel can be