サークルのイメージがありますが、サークルは見つけたいがハフリングサークルは使用しません。ハーフサークルを使用しないサークルの検出
私は道を見つけた、リンクhere。
しかし、円のx座標とy座標がわからないので、白から黒への遷移座標は見つかりません。他にどんな方法がありますか、あるいは私はそのアプローチをどのように働かせることができますか?
これは私のテスト画像です:
サークルのイメージがありますが、サークルは見つけたいがハフリングサークルは使用しません。ハーフサークルを使用しないサークルの検出
私は道を見つけた、リンクhere。
しかし、円のx座標とy座標がわからないので、白から黒への遷移座標は見つかりません。他にどんな方法がありますか、あるいは私はそのアプローチをどのように働かせることができますか?
これは私のテスト画像です:
1つの可能なアプローチは、最初のthreshold
に円の周りのノイズの一部を取り除くための画像です。次に、Canny
エッジ検出を使用して円のエッジを抽出することができます。最後に、findNonZero
ピクセル座標のリストを取得します。
import cv2
import numpy as np
img = cv2.imread('circle.png', 0)
mask = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1]
edges = cv2.Canny(mask, 20, 100)
points = np.array([p[0] for p in cv2.findNonZero(edges)])
をそしてすべての中間画像を保存したピクセルをプロットするためにいくつかの余分なコードを追加し、C++に移植:
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat img(cv::imread("circle.png", 0));
cv::Mat mask;
cv::threshold(img, mask, 127, 255, cv::THRESH_BINARY);
cv::imwrite("circle_1.png", mask);
cv::Mat edges;
cv::Canny(mask, edges, 20, 100);
cv::imwrite("circle_2.png", edges);
std::vector<cv::Point2i> points;
cv::findNonZero(edges, points);
cv::Mat output(cv::Mat::zeros(edges.size(), CV_8UC3));
for (auto const& p : points) {
output.at<cv::Vec3b>(p) = cv::Vec3b(127, 255, 127);
}
cv::imwrite("circle_3.png", output);
}
threshold
の出力:Canny
の
出力:
再プロットピクセル:
別のアプローチ(それはちょうど円以上するのに便利です)image contoursを見つけて、それは質量の中心だ見つけるために、円周上にimage moment analysisを行うには、次のようになります。
画像処理を進める場合は、そのことを学ぶことをおすすめします。それらは、画像をより有用な構造に変換する非常に有用なアプローチです。
ありがとうございます@Lamar Latrell –
ラマー!あなたの知識は抜群です!私にメッセージをお願いしますか:[email protected]ですか?私はコンピュータサイエンスの学生で、私は本当に素早い助けを使うことができました!どうもありがとうございます! –
@RoiMulia、私はあなたがより高速な応答のためにStackOverflowを使用することをお勧めします:) –
サークルパラメータが必要な場合は、「minEnclosingCircle」を使用してください – Miki
ありがとうございます:) –