图像去黑边、白边
背景
视频特征提取过程发现出现很多检索不到的问题,且对于拼接视频的检索也有问题。分析了下视频,发现原始视频是分辨率不一的,使用软件拼接后导致某些片段视频出现黑边,从而统一resize及提取ROI后的图像不完整,以至于特征提取不全,最终导致检索失败。
所以需要对视频关键帧进行去边操作后再进行后续处理。
方法
1、Opencv-Python
阈值筛选全局检测 去黑边
裁剪结果不完整 由于阈值函数的问题 不推荐
https://github.com/younkun/image_image-processing/blob/master/remove_BlackEdge.py
https://blog.csdn.net/qianqing13579/article/details/42323397
2、Opencv-Python
直方图标准差、转换二值图像、OTSU确定分割阈值、SOBEL算子边缘计算、NMS等算法实现
https://blog.csdn.net/u010333076/article/details/87900631
3、ffmpeg去黑边 自动裁剪
https://blog.csdn.net/rootusers/article/details/41674553
问题:自动滤镜怎么下载及编译ffmpeg?未研究
4、imagemagick 去黑边、白边
# 命令行方式
magick convert image-233.jpg -fuzz 10% -trim ../../test2.jpg
// C++代码实现
// @file: demo_trim.cpp
#include <Magick++.h>
#include <string>
#include <iostream>
using namespace std;
using namespace Magick;
int main(int argc, char**argv)
{
if(argc != 3)
{
cout << "Usage: ./trim input.jpg out.jpg\n";
return -1;
}
string srcpath((const char*)argv[1]);
string dstpath((const char*)argv[2]);
Image image;
try{
image.read(srcpath);
image.colorFuzz(0.15*QuantumRange);
image.trim();
image.display();
image.write(dstpath);
}
catch(Exception &error_)
{
cout << "Caught exception: " << error_.what() << endl;
return 1;
}
return 0;
}
cat Makefile
CPP:=g++ -g `Magick++-config --cxxflags --cppflags --ldflags --libs`
trim:demo_trim.cpp
${CPP} $< -o $@
clean:
rm -rf trim
效果
参考
1、imagemagick处理命令
2、imagemagick官网去边使用说明
3、imagemagick官网地址
4、imagemagick trim