Android App开发教程(二)——透过Chaquopy结合Python第三方库opencv安装与应用

1.      前言

前一篇已经教大家如何在Android Studio上如何进行Python第三方库numpy的安装与应用;这次要来教大家Python第三方库OpenCV的安装与应用;对于Android开发者而言,使用OpenCV可以实现很多有趣的功能。然而,Android开发中使用OpenCV也存在一些问题,比如对库的导入和集成需要较高的技术门槛。

相比之下,使用Chaquopy集成Python和OpenCV库,可以简化Android开发中对OpenCV库的使用和集成,使得开发人员可以更加轻松地开发应用。使用Chaquopy,开发人员可以直接使用Python编写OpenCV的代码,避免Java语言本身的一些限制。

2.      Android Studio安装Python第三方库OpenCV

以下环境是在Windows 10下建置。

a.       在appabuild.gradleadefaultConfigapython区块添加文件添加。(图1)

pip{
    install "opencv-python"
}​
Android App开发教程(二)——透过Chaquopy结合Python第三方库opencv安装与应用_第1张图片
图1

b.       设定完后记得,点击Sync Now进行同步,完成之后,Python的第三方库OpenCV套件就成功加入项目内。(图2)

Android App开发教程(二)——透过Chaquopy结合Python第三方库opencv安装与应用_第2张图片

图2

3.      Android内使用 Python第三方库OpenCV套件范例

以下提供一个范例,让各位看官们可以了解如何经由Java读取图片,并转换格式传给python OpenCV进行运算,运算后如何再将python格式转换成Java格式进行显示,达到java与python交互应用。

a. 此范例会使用numpy与OpenCV两种第三方库,因此看官们也需要将numpy进行安装。(图3)

Android App开发教程(二)——透过Chaquopy结合Python第三方库opencv安装与应用_第3张图片

图3

b. 增加一个py档案,由于python运行OpenCV运算时,需要将Java的byte格式透过numpy转成OpenCV格式,因此透过以下程式码可进行转换。(图4)

import numpy as np
import cv2

def opencv_process_image(data):
    # 读取图片数据
    image = cv2.imdecode(np.asarray(data),cv2.IMREAD_COLOR)
    # 将图像转换为灰度图像
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 将处理后的图像转换为png格式并转换为byte数组
    is_success, im_buf_arr = cv2.imencode(".png", gray_image)
    byte_im = im_buf_arr.tobytes()

    # 返回处理后的图像数据
    return byte_im​
 Android App开发教程(二)——透过Chaquopy结合Python第三方库opencv安装与应用_第4张图片

图4

c. 在Android layout的activity_main档案进行UI设计,增加两个ImageView及一个Button功能;source_imageview显示原始图片,当Button按下后,response_imageview则显示OpenCV处理完后的图片。(图5)





android:layout_marginBottom="331dp"
android:text="Go"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />​

Android App开发教程(二)——透过Chaquopy结合Python第三方库opencv安装与应用_第5张图片

图5

e. 在Java主程式MainActivity档案内增加以下程式码,各位看官可以看程式码内的注解了解相关应用。(图6)

public class MainActivity extends AppCompatActivity {
    Button Go_btn;
    ImageView src_image, res_image;

    BitmapDrawable drawable;
    Bitmap  bitmap;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Go_btn = findViewById(R.id.Go_button);
        src_image = (ImageView) findViewById(R.id.source_imageview);
        res_image = (ImageView) findViewById(R.id.response_imageview);
        //初始化python环境
        if(!Python.isStarted()){
            Python.start(new AndroidPlatform(this));
        }
        Python python_cv = Python.getInstance();

        Go_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 获取源图片并转换为Bitmap对象
                drawable = (BitmapDrawable) src_image.getDrawable();
                bitmap = drawable.getBitmap();
                // 将Bitmap转换为byte[]对象
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
                byte[] byteArray = stream.toByteArray();

                // 调用Python方法处理图片
                PyObject cvObject = python_cv.getModule("opencv_python");
                byte[] bytes = cvObject.callAttr("opencv_process_image",byteArray).toJava(byte[].class);

                // 将处理后的图片显示到画面上
                Bitmap bmp = BitmapFactory.decodeByteArray(bytes,0, bytes.length);
                res_image.setImageBitmap(bmp);
            }
        });
    }
}​
 Android App开发教程(二)——透过Chaquopy结合Python第三方库opencv安装与应用_第6张图片

图6

f. 结果显示(图7)

 Android App开发教程(二)——透过Chaquopy结合Python第三方库opencv安装与应用_第7张图片

图7

结语

透过以上的教学,相信各位已经能够成功透过Android Studio轻松地结合Chaquopy使用Python第三方库OpenCV,这让习惯使用Python OpenCV方式的看官们提供更多的功能应用选择,使得开发过程更加灵活和高效,有问题的看官们欢迎联系我,我们一同讨论。

喜欢我的帖子,请帮我按个”收藏”,我们下回见。

Q&A

1. 为什么要使用Chaquopy结合OpenCV进行Android开发?

Ans:结合Chaquopy和OpenCV可以方便地在Android应用程序中使用Python代码和OpenCV图像处理功能,从而简化开发过程并提高应用程序的性能。 

2. Chaquopy支援其他Python第三方库吗?

Ans:Chaquopy 可以支援多种常用的Python第三方库,例如:SciPy、Pandas、Matplotlib、Scikit-learn等。详细第三方库可参考Chaquopy package repository网站 

3. 在使用Chaquopy时需要注意哪些问题?

Ans:需要确保Python代码和OpenCV库文件与应用程序的其他组件相容,并确保使用正确的Python版本。 

4. Chaquopy的Python是否支持多线程?

Ans:是的,Chaquopy的Python支持多线程,并且可以通过简单的配置进行优化。 

5. 需要为Python脚本编译.so文件吗?

Ans:不需要,Chaquopy将Python代码实时编译为本机代码。

你可能感兴趣的:(QUALCOMM产线,python,opencv,开发语言,android)