您是否知道移动相机背景扣除的任何来源? 我想写类似的东西: http://vimeo.com/72577177
有许多关于静止背景的运动检测的资料,但我找不到任何带有移动背景的代码示例。
编辑: 我通过检测最大数量的相似矢量来考虑光流和去除背景。可能就这么简单吗?
答案 0 :(得分:2)
以下是关于此主题的两篇研究文章:
答案 1 :(得分:2)
答案 2 :(得分:1)
实现该视频并不是很难。因为移动物体很小而背景是静止的,尽管相机移动缓慢。
首先,确定连续帧之间的运动矢量。例如,帧t-1中的(100,100)处的像素在帧t中移动到(103,102)。由于背景的大多数部分是静态的,因此可以确定共同的运动矢量来描述大多数像素的运动。
其次,使用RANSAC或其他算法来找到不根据运动矢量移动的像素。这些像素代表移动物体。
答案 3 :(得分:0)
您引用的链接更像是对象跟踪。但是,如果您想使用opencv应用移动背景减法,则会更容易。它的工作原理类似于运动跟踪器。
这是代码:
public class sikapadapter extends RecyclerView.Adapter<sikapadapter.ViewHolder> {
private int[] integer;
String option[];
private OnRadioChangeListener onRadioChangeListener;
public sikapadapter(String[] option, OnRadioChangeListener onRadioChangeListener) {
this.option = option;
this.onRadioChangeListener = onRadioChangeListener;
integer = new int[option.length];
}
interface OnRadioChangeListener{
void onRadioChange(int position,int checkedId);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.recycleview_sikap_layout,parent,false);
sikapadapter.ViewHolder aadvh = new sikapadapter.ViewHolder(view);
return aadvh;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if(integer[position] == 1){
holder.radio.check(R.id.radiobutton1);
}else if(integer[position] == 2){
holder.radio.check(R.id.radiobutton2);
}else if(integer[position] == 3){
holder.radio.check(R.id.radiobutton3);
}else if(integer[position] == 4){
holder.radio.check(R.id.radiobutton4);
}else {
holder.radio.clearCheck();
}
holder.text.setText(option[position]);
holder.radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(onRadioChangeListener!=null){
if(checkedId == R.id.radiobutton1){
checkedId = 1;
integer[position] = 1;
onRadioChangeListener.onRadioChange(position,checkedId);
}
if(checkedId == R.id.radiobutton2){
checkedId = 2;
integer[position] = 2;
onRadioChangeListener.onRadioChange(position,checkedId);
}
if(checkedId == R.id.radiobutton3){
checkedId = 3;
integer[position] = 3;
onRadioChangeListener.onRadioChange(position,checkedId);
}
if(checkedId == R.id.radiobutton4){
checkedId = 4;
integer[position] = 4;
onRadioChangeListener.onRadioChange(position,checkedId);
}
}
}
});
}
@Override
public int getItemCount() {
return option.length;
}
public class ViewHolder extends RecyclerView.ViewHolder{
TextView text;
RadioGroup radio;
RadioButton radio1,radio2,radio3,radio4;
public ViewHolder(@NonNull View itemView) {
super(itemView);
text = itemView.findViewById(R.id.recytexttampil);
radio = itemView.findViewById(R.id.radiogroup);
radio1 = itemView.findViewById(R.id.radiobutton1);
radio2 = itemView.findViewById(R.id.radiobutton2);
radio3 = itemView.findViewById(R.id.radiobutton3);
radio4 = itemView.findViewById(R.id.radiobutton4);
}
}
}
此代码使您可以在视频文件中应用背景减法并将其保存。