Hem OpenCv hem StackOverflow için yeni ve Android programlamaya yeni geliyorum, bu yüzden lütfen sorularım aptalca özür dilerim.Android'de OpenCv: dosyadan görüntülerdeki anahtar nokta algılama
Kameranın görüntüsüne daha çok benzeyen hangi görüntü dosyasının olduğunu görmek için, fotoğraf makinesinden alınan bir görüntüyü bazı görüntü dosyalarıyla eşleştirmeye çalışıyorum. Bu yüzden ben onları tanımlamak için dosya görüntüsünün ve SURF ile kamera görüntüsünün (SIFT denedim) anahtar noktalarını almak için DescriptorExtractor.compute kullanıyorum ama ... dosya görüntüsüne uygulanan yöntem her zaman boş bir anahtar noktası listesi döndürür Bunu kamera görüntüsünde kullanırsam, her zaman boş olmayan bir liste alırım (ortalamada yüz puan). Beni en çok şaşırtan şey, kameradan ilk olarak yüklenen ve aynı zamanda dosyadan yüklenen, aynı görüntüyü kullanmanın bile, bu davranışa sahip olduğudur.
Neyi yanlış yaptığımı bulmama yardım eder misiniz? İşte bazı test kodları (sadece dosya bölümü için değil, aynı zamanda kameradan da anahtar noktaları almak için aynı yöntemi kullanıyorum).
public class HelloOpenCvActivity extends Activity {
private static final int FILE_REQUEST = 400;
/** Called when the activity is first created. */
ImageView img;
TextView txt;
Bitmap logo;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
img = (ImageView) findViewById(R.id.image);
txt = (TextView) findViewById(R.id.kp);
img.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
chooseFile();
}
});
}
private void chooseFile(){
Intent fileIntent = new Intent(Intent.ACTION_GET_CONTENT);
fileIntent.addCategory(Intent.CATEGORY_OPENABLE);
fileIntent.setType("image/*");
startActivityForResult(Intent.createChooser(fileIntent,"prova"), FILE_REQUEST);
}
/*Quando ho il risultato della chiamata al file explorer, viene invocata questa callback */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == FILE_REQUEST) {
// obtain the filename
Uri uri = data.getData();
String filePath = null;
if (uri != null) {
if (uri.toString().startsWith("file:")) {
filePath = uri.getPath();
} else { // uri.startsWith("content:")
Cursor c = getContentResolver().query(uri, null, null, null, null);
if (c != null && c.moveToFirst()) {
int id = c.getColumnIndex(Images.Media.DATA);
if (id != -1) {
filePath = c.getString(id);
}
}
}
}
if (filePath != null) {
logo = BitmapFactory.decodeFile(filePath);
img.setImageBitmap(logo);
txt.setText(""+getKp(logo).size());
}
}
}
private List<KeyPoint> getKp(Bitmap bm){
Mat image = Utils.bitmapToMat(bm);
List<KeyPoint> kp = new ArrayList<KeyPoint>();
FeatureDetector fd = FeatureDetector.create(FeatureDetector.SURF);
fd.detect(image, kp);
return kp;
}
}
Çok teşekkür ederim.
araştırma ve baş ağrısı saat sonra Ale
Gitmek bir çekicilik gibi çalışır! –