有没有办法以特定的比特率编码JPEG?
目前,我正在使用imagemagick convert:
convert Lenna-gray-100.jpeg -quality 1.1111 test.jpeg
Run Code Online (Sandbox Code Playgroud)
比特率随着质量的提高而增加,但它是非线性的.我想明确地控制比特率.它不一定非常精确,但我希望它合理地接近(在指定设置的0.1 bpp内).
那里有编码器允许以特定的比特率编码图像吗?它不一定是imagemagick,我会采取任何工作(最好在Linux上).
这样做的一个愚蠢的方法是使用-quality参数的小数值,直到接近目标比特率,但我希望有一个更优雅的解决方案.
编辑:
所以我感到无聊,决定以快速(但愚蠢)的方式做事.
首先,这是imagemagick -quality与比特率的图表:

顺便说一句,这是我用的图像:

因此,对于较低质量的值,比特率的变化非常好,但在大约80之后变得粗糙.
下面是一些以某个目标比特率对图像进行编码的示例代码.我使用OpenCV因为它允许内存中的JPEG编码(不需要I/O).虽然我原本打算用Python来嘲笑它,但不幸的是,Python OpenCV包装器不会暴露内存编码功能.所以我用C++编写了它.
最后,我考虑在质量上使用线性插值来接近目标比特率,但由于cv::imencode只接受整数参数,因此无法设置非整数JPEG质量.OpenCV和imagemagick之间的质量比例似乎也有所不同,因此从OpenCV中获取插值质量参数并在imagemagick中使用convert效果不佳.
这意味着输出比特率不等于目标比特率,尤其是在较高比特率(> 1)时.但它很接近.
谁能提出更好的建议?
码:
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include <assert.h>
#include <vector>
using cv::Mat;
using std::vector;
#define IMENCODE_FMT ".jpeg"
#define QUALITY_UBOUND 101
#define BITS_PER_BYTE 8
int
main(int argc, char **argv)
{
if (argc != 4)
{
fprintf(stderr, "usage: %s in.png out.jpeg bpp\n", argv[0]);
return 1;
}
char *fname_in = …Run Code Online (Sandbox Code Playgroud) 有谁知道将提供基于文本的交互式界面的C++库?我想创建一个应用程序的两个版本; 一个基于控制台的程序,它将执行在命令行上或在控制台上交互式执行的任何操作以及基于GUI的程序(Mac Cocoa和Windows MFC).两个版本都将共享一个通用的C++后端.
对于基于控制台的程序,我希望类似的readline历史能力(我不能使用,因为这个应用程序将是闭源),命令完成(例如Tab激活).
也许有这样的东西已经可用了吗?
我有一个在ipad上出现的网页.我为视口添加了这个元:
<meta name="viewport" content="width=980,maximum-scale=1.0" />
Run Code Online (Sandbox Code Playgroud)
它在肖像中工作得很好,然后当ipad进入横向模式时它也可以正常工作.问题是,当我从横向回到纵向时,页面被拉伸,这意味着页面的某些部分以纵向模式离开屏幕.我必须双击屏幕才能恢复正常视图.
然后我尝试了:
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;">
Run Code Online (Sandbox Code Playgroud)
但是在纵向模式下它的宽度不够,当图标/文本应该只有一行时,图标/文字会换行到2行.它全部聚集起来.有什么建议?
为什么输出这段代码:
#include <iostream>
template<typename T> void f(T param)
{
std::cout << "General" << std::endl ;
}
template<> void f(int& param)
{
std::cout << "int&" << std::endl ;
}
int main()
{
float x ; f (x) ;
int y ; f (y) ;
int& z = y ; f (z) ;
}
Run Code Online (Sandbox Code Playgroud)
是
一般
一般
一般
第三个是令人惊讶的,因为该功能完全专门用于 int&
编辑:我知道重载可能是一个合适的解决方案.我只想学习它背后的逻辑.
c++ templates reference-type specialization template-specialization
在asp.net应用程序中是否有任何.net库可以将HTML输出转换为PDF.
如果它是免费的无关紧要
所有,我从Spring开始并获得Spring 3.0.5发行版.我看到以下罐子:
我想知道哪个jar是针对Spring的哪个模块(ORM,Core,MVC,AOP等).这样我就可以为我的项目选择正确的罐子组.
是否有一个参考解释每个罐子并正确使用?
我正在使用asp.net mvc2并且该项目从visual studio运行得非常好,但是当我发布项目时显示此错误.无法加载类型'System.Web.Mvc.ViewPage'
谢谢
为什么我应该使用关键字声明类属性(变量)或方法(函数)public,如果它们在默认情况下是公开的?或者,是吗?
用不同的方式来表达我的问题是public多余的?我的理解private和protected,但为什么声明public,如果类成员是公共的呢?