編輯:關於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逆向工程-破解 哈皮妹-蘿莉
前言 新的一年新的開始,除了繼續我的原有課題之外,我還打算研究下Android逆向工程的一些東西,主要包括反編譯、Smali、APK打包、簽名、反逆向和移動
android中使用jni對字符串加解密實現分析
android中使用jni對字符串加解密實現分析 最近項目有個需求,就是要對用戶的敏感信息進行加密處理,比如用戶的賬戶密碼,手機號等私密信息。在java中,就對字符串
Android插件化開發之Atlas初體驗
OpenAtlas一款強大的Android非代理動態部署框架,目前已經處於穩定定狀態。 與傳統的代理方式插件不同,OpenAtlas需要對注冊動態部署的組件到manif
詳解Android Material設計中陰影效果的實現方法
View可以投下的陰影,一個View的elevation值決定了它的陰影的大小和繪制的順序。可以設置一個視圖的elevation,在布局中使用屬性:android:ele