OpenCV:H1.type() == H2.type() H1.depth() == CV_32F
如題:
E/cv::error(): OpenCV(4.1.0) Error: Assertion failed (H1.type() == H2.type() && H1.depth() == CV_32F) in compareHist, file /build/master_pack-android/opencv/modules/imgproc/src/histogram.cpp, line 1936
E/org.opencv.imgproc: imgproc::compareHist_10() caught cv::Exception: OpenCV(4.1.0) /build/master_pack-android/opencv/modules/imgproc/src/histogram.cpp:1936: error: (-215:Assertion failed) H1.type() == H2.type() && H1.depth() == CV_32F in function ‘compareHist’
W/System.err: CvException [org.opencv.core.CvException: cv::Exception: OpenCV(4.1.0) /build/master_pack-android/opencv/modules/imgproc/src/histogram.cpp:1936: error: (-215:Assertion failed) H1.type() == H2.type() && H1.depth() == CV_32F in function ‘compareHist’
W/System.err: ]
W/System.err: at org.opencv.imgproc.Imgproc.compareHist_0(Native Method)
W/System.err: at org.opencv.imgproc.Imgproc.compareHist(Imgproc.java:1020)
W/System.err: at com.vcard.vcardtempsdkv2.MainActivity.onResume(MainActivity.java:567)
W/System.err: at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1456)
W/System.err: at android.app.Activity.performResume(Activity.java:7614)
W/System.err: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4412)
W/System.err: at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4470)
W/System.err: at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
W/System.err: at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
W/System.err: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:112)
W/System.err: at android.os.Looper.loop(Looper.java:216)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7625)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
比較兩個圖片相似度(compareHist)時出現的問題(相信其他函數也會有這樣的異常拋出),很自然是因為沒有滿足其中一個條件就會出錯。但容易入坑:
1、解決了h1的depth為CV_32F后還是報錯
是因為解決h1的depth時,卻把type給改變了,導致了不相等。
2、通過轉換函數轉換之后,忽略了type
此時需要做的是分別將兩個參數的type、depth分別輸出,看一下具體的值后轉換為相同的即可解決問題。并且都同時轉換一下:
mat1.convertTo(mat1, CvType.CV_32F);
mat2.convertTo(mat2, CvType.CV_32F);
Imgproc.compareHist(mat1,mat2,Imgproc.HISTCMP_CORREL);
出現此問題的原因:
1、兩張圖的位深度(通道不一樣)不一樣,一張24,另一張32 ,影響的type不一樣
2、depth(mat的data數據類型)不一樣,圖片類型不一樣可能導致這個數據類型不一樣
如需進一步了解mat的type和depth:OpenCV Mat基礎認知感
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的OpenCV:H1.type() == H2.type() H1.depth() == CV_32F的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中reshape_Numpy
- 下一篇: js将object转化为json数据,j