Обнаружение выпущенных дефектов [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Обнаружение выпущенных дефектов [закрыто]

Сообщение Anonymous »

Я пытаюсь обнаружить выпуклость дефектов на изображении, используя OpenCV. Тем не менее, результат кажется недостаточно хорошим. Несколько вогнутых точек не обнаружены, даже они очень ясны (синие круги на изображении, которое я связал). Я читаю CV :: ConvexityDefects () из OpenCV, что он найдет только одну вогнутую (дефектную) точку в 2 непрерывных точках (желтые точки) своего выпукляющего корпуса. Я думал, что должен интерполировать выпуклый корпус, чтобы получить более вогнутые точки, но эта идея невозможна из -за выносливости () требует индексов оригинального контура. Есть ли у вас есть идеи решить проблему или обнаружить вогнутые точки без использования функции OpenCV. Вот мой код, который я протестировал с помощью CV :: ConvexityDefects () < /p>

Код: Выделить всё

cv::Mat test_convexityDefects(
const cv::Mat& binary_,
std::vector& concave_points_) {

concave_points_.clear();
std::vector contours;
cv::findContours(binary_, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);

cv::Mat inputImage, colored;
cv::cvtColor(binary_, inputImage, cv::COLOR_GRAY2BGR);
colored = inputImage.clone();

for (auto& cnt : contours) {
std::vector hullIndices;
cv::convexHull(cnt, hullIndices, false, false);
std::vector defects;
if (cnt.size() >= 3 && hullIndices.size() >= 3) {
cv::convexityDefects(cnt, hullIndices, defects);
std::vector farPoints;
for (const auto& d : defects) {
int farIdx = d[2];
float depth = d[3] / 256.0f;
if (depth > 1) {
concave_points_.push_back(cnt[farIdx]);
}
}
}

std::vector convexPeaks;
for (int idx : hullIndices) {
convexPeaks.push_back(cnt[idx]);
}
int numPeaks = int(convexPeaks.size());
for (int i = 0; i < numPeaks; i++) {
int iNext = (i + 1) % numPeaks;
cv::line(colored, convexPeaks[i], convexPeaks[iNext], cv::Scalar(0, 255, 0), 1);
cv::circle(colored, convexPeaks[i], 1, cv::Scalar(0, 255, 255), 2);
}
}

int binary_h = binary_.rows;
int binary_w = binary_.cols;
cv::Mat result = cv::Mat::zeros(cv::Size(binary_w, 2 * binary_h), CV_8UC3);
for (const auto& p : concave_points_) {
cv::circle(colored, p, 2, cv::Scalar(0, 0, 255), 2);
}
inputImage.copyTo(result(cv::Rect(0, 0, binary_w, binary_h)));
colored.copyTo(result(cv::Rect(0, binary_h, binary_w, binary_h)));
return result;
}

int main() {

const std::string path = "./image.png";
cv::Mat grayImage = cv::imread(path, cv::IMREAD_GRAYSCALE);
cv::Mat binary;
cv::threshold(grayImage, binary, 125, 255, cv::THRESH_BINARY);
std::vector concave_points;
cv::Mat result = test_convexityDefects(binary, concave_points);
cv::imwrite("image_out.png", result);
return 0;
}



Подробнее здесь: https://stackoverflow.com/questions/796 ... ty-defects
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Обнаружение выпущенных дефектов [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Существует ли подход искусственного интеллекта к обнаружению объектов для выявления дефектов у 10 различных брендов?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как получить список номеров версий пакетов Python, выпущенных до определенной даты?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Обнаружение использования камеры на iPhone с помощью Swift [закрыто]
    Anonymous » » в форуме IOS
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Обнаружение ложного столкновения SFML [закрыто]
    Гость » » в форуме C++
    0 Ответы
    79 Просмотры
    Последнее сообщение Гость

Вернуться в «C++»