在Android中使用OpenCv 來處理圖片

來源:互聯網
上載者:User

最近在研究在用C來處理圖片,後來再網上找了一下,有的說用libjpeg和opencv來處理圖片。先研究一下,opencv來處理圖片,

這是網上一位友人寫的代碼http://blogold.chinaunix.net/u1/57901/showart.php?id=2512389

 

開始之前,先編譯opencv得到 libandroid-opencv.so庫 ,請參考這位牛人的部落格http://blog.csdn.net/hellogv/archive/2011/01/21/6157316.aspx

 

 

 

1、建立一個android工程,工程名為opencvtest,包名為com.opencvtest

在工程的根目錄下建立一個jni檔案夾,然後分別建立Android.mk和hello-jni.cpp兩個檔案Android.mk的內容如下: # date: Summer, 2010<br /># author: Ethan Rublee<br /># contact: ethan.rublee@gmail.com<br />#<br />LOCAL_PATH := $(call my-dir)</p><p>include $(CLEAR_VARS)</p><p>#OPENCV_ROOT must be defined.<br />ifndef OPENCV_ROOT<br />$(warning Please define OPENCV_ROOT to point to the root folder of opencv, try ndk-build OPENCV_ROOT=../../opencv)<br />OPENCV_ROOT=../../opencv<br />$(warning Defaulting to OPENCV_ROOT=$(OPENCV_ROOT))<br />endif</p><p>#define OPENCV_INCLUDES<br />include $(OPENCV_ROOT)/includes.mk<br />#define OPENCV_LIBS<br />include $(OPENCV_ROOT)/libs.mk</p><p>LOCAL_LDLIBS += $(OPENCV_LIBS)</p><p>LOCAL_C_INCLUDES += $(OPENCV_INCLUDES) $(ANDROID_OPENCV_INCLUDES)</p><p>LOCAL_MODULE := hello-jni</p><p>LOCAL_SRC_FILES := hello-jni.cpp</p><p>include $(BUILD_SHARED_LIBRARY)</p><p>2、hello-jni.cpp#include <jni.h><br />#include <cstdlib><br />#include <stdexcept><br />#include <string></p><p>#include <opencv2/core/core.hpp><br />#include <opencv2/features2d/features2d.hpp><br />#include <opencv2/highgui/highgui.hpp><br />#include <opencv2/imgproc/imgproc.hpp><br />#include <opencv2/calib3d/calib3d.hpp><br />#include <opencv2/imgproc/imgproc_c.h></p><p>static CvScalar colors[]=<br />{<br /> {{0,0,255}},<br /> {{0,128,255}},<br /> {{0,255,255}},<br /> {{0,255,0}},<br /> {{255,128,0}},<br /> {{255,255,0}},<br /> {{255,0,0}},<br /> {{255,0,255}},<br /> {{255,255,255}}</p><p>};</p><p>extern "C"<br />jint Java_com_opencv_ActivityMain_getKeypointNum(JNIEnv* env,jobject thiz)<br />{<br />IplImage* object = cvLoadImage("/sdcard/camera.jpg",CV_LOAD_IMAGE_GRAYSCALE);<br /> if(object != NULL){<br /> CvSURFParams params = cvSURFParams(500, 1);<br /> CvMemStorage* storage = cvCreateMemStorage(0);<br /> IplImage* object_color = cvCreateImage(cvGetSize(object), 8, 3);<br /> CvSeq *objectKeypoints = 0;<br /> CvSeq *objectDescriptors = 0;</p><p> cvCvtColor( object, object_color, CV_GRAY2BGR );<br /> cvExtractSURF( object, 0, &objectKeypoints, &objectDescriptors, storage, params);</p><p> for( int i = 0; i < objectKeypoints->total; i++ )<br /> {<br /> CvSURFPoint* r = (CvSURFPoint*)cvGetSeqElem( objectKeypoints, i );<br /> CvPoint center;<br /> int radius;<br /> center.x = cvRound(r->pt.x);<br /> center.y = cvRound(r->pt.y);<br /> radius = cvRound(r->size*1.2/9.*2);<br /> cvCircle( object_color, center, radius, colors[0], 1, 8, 0 );<br /> }</p><p> cvSaveImage( "/sdcard/src_surf.jpg" , object_color);</p><p> return objectKeypoints->total;<br /> }</p><p> return 0;</p><p>}</p><p>3、ActivityMain.java package com.opencv;</p><p>import android.app.Activity;<br />import android.os.Bundle;<br />import android.widget.TextView;</p><p>public class ActivityMain extends Activity {<br /> /** Called when the activity is first created. */</p><p>private TextView text;</p><p> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);</p><p> text = (TextView) findViewById(R.id.text);<br /> text.setText(Integer.toString(getKeypointNum()));</p><p> }</p><p> public native int getKeypointNum();</p><p> static<br /> {</p><p> System.loadLibrary("hello-jni");<br /> }</p><p>}4、把這個工程編譯了,工程結構 5、效果原圖:6、注意,如果處理大的圖片的時候會出現異常。沒有響應,不知道是什麼問題!求高手解答。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.