Мой ответ на C ++, но его легко передать на Python.
Вы используете функцию findChessboardCorners
OpenCV, которая на самом деле не является функцией для поиска углов на любой возможной шахматной доске. Эта функция обычно используется для калибровки камеры (определение параметров камеры) и требует, например, самопечатной черно-белой шахматной доски. Более старый пример можно найти здесь . Интересно, что это работает и для вашей коричневой шахматной доски.
Для поиска углов шахматной доски я бы порекомендовал другой рабочий процесс OpenCV. Я читаю изображение, применяю двусторонний фильтр к изображению, чтобы сгладить изображение, но сохранить края, а затем использую функцию goodFeaturesToTrack
, чтобы найти самые сильные углы в изображении. Поскольку вы не предоставили изображение без дополнительных строк, я использовал случайное целое rnet изображение коричневой шахматной доски: The C++ code is as follows:
int main(int argc, char** argv)
{
// Reading the images
cv::Mat img = cv::imread("chessboard_2.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat img_rgb = cv::imread("chessboard_2.jpg", cv::IMREAD_COLOR);
cv::Mat bilateral_filtered_image;
// Applying a bilateral filter to smooth the image
cv::bilateralFilter(img, bilateral_filtered_image, 5, 75, 75);
cv::namedWindow("Bilateral Filter", cv::WINDOW_NORMAL);
cv::imshow("Bilateral Filter", bilateral_filtered_image);
cv::waitKey(0);
// Find corner points using goodFeaturestoTrack with appropriate parameters
std::vector corners;
cv::goodFeaturesToTrack(bilateral_filtered_image, corners, 200, 0.01, 120);
std::cout
Result:
Углы