這兩天在學習opencv,但是坑實在是TMD多。
不過關于一些opencv+vs2019的配置坑我已經趟過去了,現在倒在了霍夫圓檢測這里。
opencv我用的版本是4.3.0版本,本來一直以為是哪里設定出問題了,然后我就用python執行同樣的操作,連霍夫函式的引數都一樣,結果,python的檢測出來了,C++的代碼死活檢測不出來,我還在網上找了很多C++的代碼,沒有一個能檢測出來,所以我想問問大佬們是不是我opencv的版本出了問題還是什么原因。
下面是我python的代碼和C++代碼對比:
先上一張原圖:

import cv2 as cv
import numpy as np
planets = cv.imread("22.jpg")
gay_img =cv.cvtColor(planets,cv.COLOR_BGRA2GRAY)
img = cv.medianBlur(gay_img, 7) #進行中值模糊,去噪點
cimg = cv.cvtColor(img, cv.COLOR_GRAY2BGR)
circles = cv.HoughCircles(img,cv.HOUGH_GRADIENT, 1, 50, param1=200, param2=40, minRadius=4, maxRadius=500)
circles = np.uint16(np.around(circles))
print(circles)
for i in circles[0,:]: #遍歷矩陣每一行的資料
cv.circle(planets, (i[0],i[1]),i[2],(0,255,0) ,2)
cv.circle(planets, (i[0], i[1]),2, (0,0,255) ,3)
cv.imshow("gay_img", planets)
cv.waitKey(0)
cv.destroyAllWindows()
然后python執行后的結果:

下面是C++:
#include<opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
#include <stdio.h>
#include<vector>
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("22.jpg");
namedWindow("1");
imshow("input", src);
Mat gray;
medianBlur(src, src, 7);
cvtColor(src, gray, COLOR_RGB2GRAY);
vector<Vec3f> circles;
//(原灰度圖,圓心與半徑(x,y,r),方法,解析度,圓心最小距離,canny高閾值,累加器閾值,最小半徑圓,最大半徑圓)
HoughCircles(gray, circles, HOUGH_GRADIENT, 1, 100, 200, 40, 4, 500);
cout << circles.size() <<endl;
for (size_t t = 0; t < circles.size(); t++) {
Point center(circles[t][0], circles[t][1]);
float radius = round(circles[t][2]);
circle(src, center, 3, Scalar(255, 0, 0), 2, 8, 0);
circle(src, center, radius, Scalar(0, 0, 255), 3, 8, 0);
}
namedWindow("out");
imshow("hough circle demo", src);
waitKey(0);
return 0;
}
這是C++的運行結果圖:

這里我在代碼中有列印下circals的size,但是通過調節霍夫函式的引數,這個size不是0,就是一個巨大的數,并且在畫圓那里會報錯:(順便問下這里imshow()函式出來的亂碼怎么解決啊,我試了GB2312,GB2312-80,utf8等幾種編碼都不行。)
哎,Python真的是yyds,因為我找了網上好幾個博主的C++代碼,他們能運行出結果的我還是不行。vs2019免費的社區版不知道怎么回事,debug的時候斷點都不給停的,直接就過去了,我在網上找了好幾個方法,還是斷點不停下,沒給我步入函式的機會直接就報錯。所以只能請問下大佬們,我這是哪里出了問題,是不是opencv版本出問題了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/243414.html
標籤:C++ 語言
