大虾们,
用DM8168, 同时保存yuv420,jpeg数据, 然后将yuv420使用opencv转成bmp。发现jpeg要比bmp模糊很多,
想问下怎么改善jpeg质量。
谢谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大虾们,
用DM8168, 同时保存yuv420,jpeg数据, 然后将yuv420使用opencv转成bmp。发现jpeg要比bmp模糊很多,
想问下怎么改善jpeg质量。
谢谢!
JPEG本來就是有損壓縮,一定會比BMP畫質有差。
要提升JPEG效果,可以在編碼處修改Q值參數。詳情可見RDK包內的Jpeg encoder usr guide
I saw your thread on e2e. Could you provide the screenshot of JPEG/BMP to let me know how much the difference are ?
你好, 谢谢你的回复。
问下怎么修改Q? 我查看了http://wenku.baidu.com/link?url=eFDqCirAcCkf5tJ8ILeezW0wbrt0H80Nd5u7S4L7LfmnQVLiLgltqegJ5osx-Sf9t76ebE5YGznJpptFnA8aCxdTbaZQV8fuNZo-0SdpjnW 还是没找到怎么修改啊。
########################################################################
# Encoder Control
########################################################################
FrameWidth = 176 # Frame width should be multiple of 16
FrameHeight = 144 # Frame height should be multiple of 16
QualityFactor = 20 # Quality Setting to be used.
# Ranges between 2 and 97.
# 2 => Lowest Quality. 97 => Best Quality.
CaptureWidth = 176 # Image width to compute image pitch.
# If Capture Width is > Image Width then
# use the former for image pitch.
generateHeader = 0 # Set 1 => Generate Header Only
debugTraceLevel = 0 # Specifies the debug trace level
lastNFramesToLog = 0 # Specifies the number of past frames
# to log debug trace. If debugTraceLevel is
# greater than 0, lastNFramesToLog must range
# between 0 and 10.
tilerEnable = 1 # 1 => Luma in TILER8, 0=> Luma in Raw.
chromaTilerMode = 0 # Valid only if tilerEnable = 1
# 1 => Chroma in TILER8, 0 => Chroma in
# TILER16
我使用的是dvrrdk_0.4版本, 我的代码为:
文件 mcfw//src_bios6/links_m3video/iva_enc/encLink_jpeg.c
430 static Int enclink_jpeg_set_dynamic_params(IJPEGVENC_DynamicParams *
431 dynamicParams,
432 EncLink_AlgDynamicParams *
433 algDynamicParams)
434 {
435 *dynamicParams = JPEGVENC_TI_DYNAMICPARAMS;
436 dynamicParams->videnc2DynamicParams.inputWidth =
437 algDynamicParams->inputWidth;
438 dynamicParams->videnc2DynamicParams.inputHeight =
439 algDynamicParams->inputHeight;
440 dynamicParams->videnc2DynamicParams.captureWidth =
441 algDynamicParams->inputPitch;
442 dynamicParams->videnc2DynamicParams.targetBitRate =
443 algDynamicParams->targetBitRate;
444 dynamicParams->videnc2DynamicParams.targetFrameRate =
445 algDynamicParams->targetFrameRate;
446 dynamicParams->videnc2DynamicParams.interFrameInterval =
447 algDynamicParams->interFrameInterval;
448 dynamicParams->videnc2DynamicParams.intraFrameInterval =
449 algDynamicParams->intraFrameInterval;
450 dynamicParams->videnc2DynamicParams.mvAccuracy =
451 algDynamicParams->mvAccuracy;
452 dynamicParams->videnc2DynamicParams.refFrameRate =
453 algDynamicParams->refFrameRate;
454 dynamicParams->videnc2DynamicParams.ignoreOutbufSizeFlag = XDAS_FALSE;
455
456 return 0;
457 }
在函数 EncLinkJPEG_algSetConfig 中有
695 algObj->u.jpegAlgIfObj.dynamicParams.qualityFactor = algObj->algDynamicParams.qpInitI;
设置algObj->u.jpegAlgIfObj.dynamicParams.qualityFactor 是否就可以了?
# Ranges between 2 and 97.
# 2 => Lowest Quality. 97 => Best Quality.
也适用吗?
谢谢。
venc_start() 后
175 VENC_CHN_DYNAMIC_PARAM_S params = { 0 };
176 params.qpMin = 97;
177 params.qpMax = 97;
178 params.qpInit = 97;
179 Venc_setDynamicParam(0, 0, ¶ms, VENC_QPVAL_I);
实际上就是设置那个qualityFactor