編輯:關於Android編程
KqwOpenCVFeaturesDemo
角點是兩條邊緣的交點或者在局部鄰域中有多個顯著邊緣方向的點。Harris角點檢測是一種在角點檢測中最常見的技術。
Harris角點檢測器在圖像上使用滑動窗口計算亮度的變化。
這裡用到了RxJava。主要是因為圖片處理是耗時操作,會阻塞線程,為了防止界面卡頓,這裡使用RxJava進行了線程切換。
/** * Harris角點檢測 * * @param bitmap 要檢測的圖片 */ public void harris(Bitmap bitmap) { if (null != mSubscriber) Observable .just(bitmap) // 檢測邊緣 .map(new Func1() { @Override public Mat call(Bitmap bitmap) { Mat grayMat = new Mat(); Mat cannyEdges = new Mat(); // Bitmap轉為Mat Mat src = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC4); Utils.bitmapToMat(bitmap, src); // 原圖置灰 Imgproc.cvtColor(src, grayMat, Imgproc.COLOR_BGR2GRAY); // Canny邊緣檢測器檢測圖像邊緣 Imgproc.Canny(grayMat, cannyEdges, 10, 100); return cannyEdges; } }) // Harris對角檢測 .map(new Func1 () { @Override public Bitmap call(Mat cannyEdges) { Mat corners = new Mat(); Mat tempDst = new Mat(); // 找出角點 Imgproc.cornerHarris(cannyEdges, tempDst, 2, 3, 0.04); // 歸一化Harris角點的輸出 Mat tempDstNorm = new Mat(); Core.normalize(tempDst, tempDstNorm, 0, 255, Core.NORM_MINMAX); Core.convertScaleAbs(tempDstNorm, corners); // 在新的圖像上繪制角點 Random r = new Random(); for (int i = 0; i < tempDstNorm.cols(); i++) { for (int j = 0; j < tempDstNorm.rows(); j++) { double[] value = tempDstNorm.get(j, i); if (value[0] > 150) { Core.circle(corners, new Point(i, j), 5, new Scalar(r.nextInt(255), 2)); } } } // Mat轉Bitmap Bitmap processedImage = Bitmap.createBitmap(corners.cols(), corners.rows(), Bitmap.Config.ARGB_8888); Utils.matToBitmap(corners, processedImage); return processedImage; } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(mSubscriber); }
// 圖片特征提取的工具類 mFeaturesUtil = new FeaturesUtil(new Subscriber() { @Override public void onCompleted() { // 圖片處理完成 dismissProgressDialog(); } @Override public void onError(Throwable e) { // 圖片處理異常 dismissProgressDialog(); } @Override public void onNext(Bitmap bitmap) { // 獲取到處理後的圖片 mImageView.setImageBitmap(bitmap); } }); // Harris角點檢測 mFeaturesUtil.harris(mSelectImage);
前言 新的一年新的開始,除了繼續我的原有課題之外,我還打算研究下Android逆向工程的一些東西,主要包括反編譯、Smali、APK打包、簽名、反逆向和移動
android中使用jni對字符串加解密實現分析 最近項目有個需求,就是要對用戶的敏感信息進行加密處理,比如用戶的賬戶密碼,手機號等私密信息。在java中,就對字符串
OpenAtlas一款強大的Android非代理動態部署框架,目前已經處於穩定定狀態。 與傳統的代理方式插件不同,OpenAtlas需要對注冊動態部署的組件到manif
View可以投下的陰影,一個View的elevation值決定了它的陰影的大小和繪制的順序。可以設置一個視圖的elevation,在布局中使用屬性:android:ele