java - 使用 Canvas 正确绘制点

标签 java python android opencv canvas

我有一个Python脚本,它使用OpenCV从ckpts文件(模型)获得的图像输入在眼睛区域的轮廓上绘制地标。 我想在同一张图片中绘制这些点(地标)。 我从图片中获得了预测点,并尝试使用 Canvas 绘制这些点 (x,y),但结果不同。 两张图片的区别:

Landmarks are drawn using python script (OpenCV)

Landmarks are draw using java code (Canvas)

我尝试了很多方法,我使用 Canvas 库在 imageview 上绘制点(我在 Assets 文件夹中加载了相同的图像),但这并不能解决我的问题..

这是一段Python代码,展示了如何在图像上绘制地标:

predictions = estimator.predict(input_fn=_predict_input_fn)
        for _, result in enumerate(predictions):
            img = cv2.imread(result['name'].decode('ASCII') + '.jpg')
            print(result['logits'])
            print(result['name'])
            marks = np.reshape(result['logits'], (-1, 2)) * IMG_WIDTH
            print("reshape values  "+str(np.reshape(result['logits'], (-1,2))))
            print("marks  "+str(marks))

            for mark in marks:
                cv2.circle(img, (int(mark[0]), int(
                    mark[1])), 1, (0, 255, 0), -1, cv2.LINE_AA)
            try:
                img = cv2.resize(img, (512, 512))
                cv2.imshow('result', img)
            except Exception as e:
                print(str(e))
           # output_node_names = [n.name for n in tf.get_default_graph().as_graph_def().node]
           # print(output_node_names)
            cv2.waitKey()

此文件显示来自 python 代码的打印日志:


[0.33135968 0.19592011 0.34212315 0.17297666 0.36624995 0.16413747
 0.3894139  0.17440952 0.39828074 0.1978043  0.3891497  0.22268474
 0.36345637 0.22974193 0.3401759  0.2193309  0.30167252 0.20411113
 0.3167112  0.19134495 0.33793524 0.18388326 0.3642417  0.18049955
 0.3903508  0.18533507 0.40906873 0.1957745  0.42142123 0.21091096
 0.40550107 0.21829814 0.38345626 0.22071144 0.35900232 0.22142673
 0.3363348  0.21877256 0.3161971  0.2133534  0.62843406 0.21482795
 0.6389724  0.1914106  0.6628249  0.1835615  0.6858679  0.19583184
 0.6946868  0.22111627 0.6840309  0.24444285 0.66027373 0.25241333
 0.6351568  0.24192403 0.60499936 0.22642238 0.6210091  0.21289764
 0.6423563  0.2042976  0.6685919  0.20277795 0.69201195 0.20948553
 0.70882106 0.22015369 0.71931773 0.23518339 0.7076659  0.24166131
 0.69054717 0.24350837 0.6694564  0.24258481 0.64537776 0.23927754
 0.62199306 0.23511863]
b'C:\\Users\\*******\\cnn-facial-landmark\\targetiris\\irisdata-300VW_Dataset_2015_12_14-017-000880'
reshape values  [[0.33135968 0.19592011]
 [0.34212315 0.17297666]
 [0.36624995 0.16413747]
 [0.3894139  0.17440952]
 [0.39828074 0.1978043 ]
 [0.3891497  0.22268474]
 [0.36345637 0.22974193]
 [0.3401759  0.2193309 ]
 [0.30167252 0.20411113]
 [0.3167112  0.19134495]
 [0.33793524 0.18388326]
 [0.3642417  0.18049955]
 [0.3903508  0.18533507]
 [0.40906873 0.1957745 ]
 [0.42142123 0.21091096]
 [0.40550107 0.21829814]
 [0.38345626 0.22071144]
 [0.35900232 0.22142673]
 [0.3363348  0.21877256]
 [0.3161971  0.2133534 ]
 [0.62843406 0.21482795]
 [0.6389724  0.1914106 ]
 [0.6628249  0.1835615 ]
 [0.6858679  0.19583184]
 [0.6946868  0.22111627]
 [0.6840309  0.24444285]
 [0.66027373 0.25241333]
 [0.6351568  0.24192403]
 [0.60499936 0.22642238]
 [0.6210091  0.21289764]
 [0.6423563  0.2042976 ]
 [0.6685919  0.20277795]
 [0.69201195 0.20948553]
 [0.70882106 0.22015369]
 [0.71931773 0.23518339]
 [0.7076659  0.24166131]
 [0.69054717 0.24350837]
 [0.6694564  0.24258481]
 [0.64537776 0.23927754]
 [0.62199306 0.23511863]]
marks  [[37.112286 21.943052]
 [38.317795 19.373386]
 [41.019993 18.383396]
 [43.614357 19.533867]
 [44.607445 22.154081]
 [43.584766 24.940691]
 [40.707115 25.731096]
 [38.0997   24.565062]
 [33.787323 22.860447]
 [35.471653 21.430634]
 [37.848747 20.594925]
 [40.79507  20.21595 ]
 [43.719288 20.757528]
 [45.815697 21.926743]
 [47.199177 23.622028]
 [45.41612  24.44939 ]
 [42.9471   24.71968 ]
 [40.20826  24.799793]
 [37.6695   24.502527]
 [35.414074 23.89558 ]
 [70.38461  24.06073 ]
 [71.56491  21.437988]
 [74.23639  20.558887]
 [76.81721  21.933167]
 [77.80492  24.765022]
 [76.61146  27.3776  ]
 [73.95066  28.270294]
 [71.137566 27.095491]
 [67.759926 25.359306]
 [69.553024 23.844536]
 [71.9439   22.881332]
 [74.88229  22.71113 ]
 [77.50534  23.46238 ]
 [79.387955 24.657213]
 [80.56358  26.34054 ]
 [79.25858  27.066067]
 [77.341286 27.272938]
 [74.97912  27.169498]
 [72.28231  26.799084]
 [69.66322  26.333286]]

Java 代码(Android)

  private void drawpoint(ImageView imageView,float x,float y, int raduis){
        myOptions.inDither = true;
        myOptions.inScaled = false;
        myOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;// important
        myOptions.inPurgeable = true;
        canvas.drawCircle(x,y, raduis, paint);
        imageView = (ImageView)findViewById(R.id.imageView);
        imageView.setAdjustViewBounds(true);
        imageView.setImageBitmap(mutableBitmap);
    }
         drawpoint(image2,  38,  19,1);
            drawpoint(image2,41,18,1);
            drawpoint(image2,43,19,1);
            drawpoint(image2,40,25,1);
            drawpoint(image2,38,24,1);

如何解决这个问题?

最佳答案

问题已解决。 我使用 OpenCV 库在 Android 中绘图,而不是 Canvas 库。 我正是使用了这个功能: Imgproc.circle()

关于java - 使用 Canvas 正确绘制点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57498154/

相关文章:

java - fragment 显示但回收器 View 不显示

android - 直接使用 cordova apk 使用 openssl 证书时 apksigner 失败

android - 我如何处理预览和人脸检测的旋转问题

python - 是否可以继承 win32serviceutil.ServiceFramework 的子类?

python - 如何从数据库生成每日/每周/每月/每年汇总值

python - 如何使用 python 运行 Azure CLI 命令?

Java 代码陷入无限重复的 while 循环

java - spring-data-cassandra CassandraBatchTemplate 不公开

java - 如何禁用默认 servlet 容器 session ?

Java + MySQL 或 LDAP 服务器状态