从python代码(opencv)到java(android)的端口
我正在尝试将我的python代码(用于opencv图像处理)翻译成android 这是我的python代码从python代码(opencv)到java(android)的端口,java,android,python,opencv,image-processing,Java,Android,Python,Opencv,Image Processing,我正在尝试将我的python代码(用于opencv图像处理)翻译成android 这是我的python代码 image=cv2.imread(“x.jpg”) 灰色=cv2.CVT颜色(图像,cv2.COLOR\u BGR2GRAY) 模糊=cv2.高斯模糊(灰色,(5,5,0) 边缘=cv2.Canny(模糊,200,50) cv2.imwrite(“eded.jpg”,带边框) cnts=cv2.findContentours(edge.copy(),cv2.RETR_EXTERNAL, c
image=cv2.imread(“x.jpg”)
灰色=cv2.CVT颜色(图像,cv2.COLOR\u BGR2GRAY)
模糊=cv2.高斯模糊(灰色,(5,5,0)
边缘=cv2.Canny(模糊,200,50)
cv2.imwrite(“eded.jpg”,带边框)
cnts=cv2.findContentours(edge.copy(),cv2.RETR_EXTERNAL,
cv2.链条(近似简单)
cnts=imutils.GRAP_轮廓(cnts)
cnts=已排序(cnts,key=cv2.contourArea,reverse=True)
displayCnt=None
印刷品(透镜(碳纳米管))
#在轮廓上打圈
对于碳纳米管中的碳:
#近似轮廓
peri=cv2.弧长(c,真)
近似值=cv2.近似聚合度(c,0.02*peri,真)
#如果轮廓有四个顶点,那么我们发现
#恒温器显示器
如果len(近似值)=4:
displayCnt=近似值
打破
输出=四点变换(图像,显示,重塑(4,2))
这是我的java代码
Imgproc.cvtColor(src,src,Imgproc.COLOR\u BGRA2GRAY);
GaussianBlur(src,src,新尺寸(5,5),0);
Imgproc.Canny(src,src,50200);
列表等高线=新的ArrayList();
Mat层次结构=新Mat();
Imgproc.findContours(src、等高线、层次、Imgproc.RETR\u外部、Imgproc.CHAIN\u近似\u简单);
hierarchy.release();
sortContoursByArea(等高线);
对于(int c=0;c
这是我经过一些处理后的图像
边缘图像:
(看起来不错)
这是我在python中得到的(这是必需的输出)和在java中得到的
结果
如何在java中获得相同的结果
编辑
在matofpoints中=新的MatOfPoint(approxCurve.toArray())代码>
我使用了points.dump()
,我发现这4个点位于正确的位置
我的问题在这里
Rect Rect=Imgproc.boundingRect(点);
src=新材料(src2,rect);
我觉得它试图用x,y,宽度,高度来创建一个正方形,但事实并非如此!
如何使用四个MatOfPoint点坐标裁剪图像?能否确认您是否使用相同的OpenCV版本用于Python和Android?如果是,则尝试Imgproc.cvtColor(src,src,Imgproc.COLOR\u RGBA2GRAY)代码>在Android的情况下。对于BGR
和RGB
image,灰色输出是不同的。python中的opencv是v4(我编写代码所遵循的教程是关于v3的)和android 3.4.3(更高的可用i thing)!更改cvtColor没有任何作用,我认为问题出在内部!然后你需要在每一步调试输出。我调试过了,请参阅我文章中的编辑