其实吧,问题求解课还是有点意思的。。
Seam Carving:以水平和垂直两种方式简单地压缩和拉伸图片,常用于一些图像处理软件,能够做到主要目标不失真。结果肖老师二话不多说就让我们自己写一个。。我哪会写什么图像压缩,网上一查全是java的代码,可我已经忘得差不多了。再查c++,结果c++要用到openCV,呵呵,我还是用java吧。可毕竟菜得扣脚(其实是懒),就拿来了同学的代码看了看,其实并不难,我就顺手补充了点注释。
代码如下:
|
|
要用到普林斯顿大学的包文件。核心算法就是个dp,没什么大花头,能量函数什么的就不多说了,这么用就行了,原理就说不清了。
知识点补充:
颜色方面的小知识,以白色为例:0xFFFFFFFF 前两个F是透明度的大小,然后是红色的,绿色的,蓝色的亮度。因为是十六进制,所以一个F占四位二进制数,两个占八位,也就是一个byte,代码中要取到红色的值怎么办,很简单,用(rgb >> 16) & 0xFF;
,后面十六位舍弃,再和0xFF,(也就是二进制11111111) 位与一下,就截取下来了,绿色蓝色同理。