找到图像上的特定点

2024-03-02

我正在尝试编写一个程序来解决难题。我的尝试与我用来测试的示例谜题效果很好。现在我正在尝试为一个真正的谜题制作一个。 这个新拼图的拼图块实际上没有正确的形状。

我设法将图像变成黑白,最后变成 1 和 0 的数组,其中 1 表示片段,0 表示背景。我想找到一种方法来识别这些碎片的 4 个角、峰和深度的坐标。

我尝试计算 1 附近 0 的数量,以查看边界中的最大曲线。但形状不够光滑,无法发挥作用。

counter = np.zeros((lenX,lenY),dtype=int)
for i in range(lenX):
    for j in range(lenY):
        if img[i,j]==1:
            counter[i,j] = count_white(img,i,j,lenX,lenY)

print(counter)
tpath = os.getcwd()+"/test.jpg"
print(cv2.imwrite(tpath, Image))
print("saved at : ",tpath)
np.savetxt("test.csv", counter, delimiter=",")

def count_white(img,x,y,lenX,lenY):
    X = [x-1,x,x+1,x+1,x+1,x,x-1,x-1]
    Y = [y-1,y-1,y-1,y,y+1,y+1,y+1,y]
    count = 0
    for i in range(len(X)):
        if X[i] < lenX and Y[i] < lenY:
            if img[X[i],Y[i]] == 0:
                count=count+1
    return count

有什么建议、参考或想法吗?


对 C++ 代码感到抱歉,但它适用于您的情况:

cv::Mat gray = cv::imread("Sq01a.png", cv::IMREAD_GRAYSCALE);

gray = 255 - gray;


cv::Mat bin;
cv::threshold(gray, bin, 1, 255, cv::THRESH_BINARY);

cv::Mat bigBin(2 * bin.rows, 2 * bin.cols, CV_8UC1, cv::Scalar(0));
bin.copyTo(cv::Mat(bigBin, cv::Rect(bin.cols / 2, bin.rows / 2, bin.cols, bin.rows)));


std::vector<std::vector<cv::Point> > contours;
cv::findContours(bigBin, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);

if (contours.size() > 0)
{
    std::vector<cv::Point> tmp = contours[0];
    const cv::Point* elementPoints[1] = { &tmp[0] };
    int numberOfPoints = (int)tmp.size();
    cv::fillPoly(bigBin, elementPoints, &numberOfPoints, 1, cv::Scalar(255, 255, 255), 8);
}

int maxCorners = 20;
double qualityLevel = 0.01;
double minDistance = bigBin.cols / 8;
int blockSize = 5;
bool useHarrisDetector = true;
double k = 0.04;
std::vector<cv::Point2f> corners;
cv::goodFeaturesToTrack(bigBin, corners, maxCorners, qualityLevel, minDistance, cv::noArray(), blockSize, useHarrisDetector, k);

std::vector<cv::Point2f> resCorners;
std::vector<cv::Point2f> imgCorners = { cv::Point2f(0, 0), cv::Point2f(bigBin.cols, 0), cv::Point2f(bigBin.cols, bigBin.rows), cv::Point2f(0, bigBin.rows) };
for (auto imgCorn : imgCorners)
{
    size_t best_i = corners.size();
    float min_dist = bigBin.cols * bigBin.rows;
    for (size_t i = 0; i < corners.size(); ++i)
    {
        float dist = cv::norm(imgCorn - corners[i]);
        if (dist < min_dist)
        {
            best_i = i;
            min_dist = dist;
        }
    }
    if (best_i != corners.size())
    {
        resCorners.push_back(corners[best_i]);
    }
}
cv::Mat bigColor;
cv::cvtColor(bigBin, bigColor, cv::COLOR_GRAY2BGR);
for (auto corner : corners)
{
    cv::circle(bigColor, corner, 10, cv::Scalar(0, 0, 255.), 1);
}
for (auto corner : resCorners)
{
    cv::circle(bigColor, corner, 5, cv::Scalar(0, 255, 0), 2);
}

cv::imshow("gray", gray);
cv::imshow("bigColor", bigColor);
cv::waitKey(0);

这里红色圆圈 - 来自哈里斯的角点和绿色 - 最接近图像角点。没关系?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

找到图像上的特定点 的相关文章

  • 刷新访问令牌时出现“invalid_grant”错误的情况?

    最近我一直在为这个问题揪心 一些背景 使用oauth2客户端 https code google com p google api python client 库来管理用户的令牌 这些令牌用于定期并发执行各种后台任务 每次要为用户运行其中一
  • 使用 GeoDjango 在坐标系之间进行转换

    我正在尝试将坐标信息添加到我的数据库中 添加django contrib gis支持我的应用程序 我正在写一个south数据迁移 从数据库中获取地址 并向 Google 询问坐标 到目前为止 我认为我最好的选择是使用geopy为了这 接下来
  • 垂直线 axvline 在 matplotlib 的 loglog 图中绘制位于错误位置的线

    我在使用 axvline 在 matplotlib 的 loglog 图中绘制垂直线时遇到问题 第一个问题是垂直线没有出现在正确的位置 第二个问题 可能相关的是 当我放大或平移绘图时 垂直线只是保持在原位 并且没有通过平移 滑动绘图 或放大
  • 如何编写高效的配对算法?

    我需要一种算法的帮助 该算法可以有效地将人们分组 并确保以前的配对不会重复 例如 假设我们有 10 位候选人 candidates 0 1 2 3 4 5 6 7 8 9 并假设我们有一个先前匹配的字典 这样每个键值对即candidate
  • Python 中的二进制相移键控

    我目前正在编写一些代码 以使用音频转换通过激光传输消息 文件 和其他数据 我当前的代码使用 python 中 binascii 模块中的 hexlify 函数将数据转换为二进制 然后为 1 发出一个音调 为 0 发出不同的音调 这在理论上是
  • 如何通过 Python socket.send() 发送字符串以外的任何内容

    我对 Python 编程非常陌生 但出于必要 我必须快速地将一些东西组合在一起 我正在尝试通过 UDP 发送一些数据 除了当我执行 socket send 时 我必须以字符串形式输入数据之外 一切都正常 这是我的程序 这样你就可以看到我在做
  • Python 3.x 中的 PIL ImageTk 等效项

    我正在使用 Tkinter 开发一个应用程序 它使用以下数据库png图标的图像文件 为了在应用程序中使用所述图像 我使用 PIL 打开它们Image open 运行它通过ImageTk PhotoImage函数 然后将其传递给小部件构造函数
  • 使用 Pandas 查找自滚动高点以来的周期数

    我在 Pandas 中使用rolling max函数 http pandas pydata org pandas docs stable computation html moving rolling statistics moments
  • Docker:通过 Gunicorn 运行 Flask 应用程序 - Worker 超时?表现不佳?

    我正在尝试创建一个用Python Flask编写的新应用程序 由gunicorn运行 然后进行dockerized 我遇到的问题是 docker 容器内的性能非常差 不一致 我最终得到了响应 但我不明白为什么性能会下降 有时我会在日志中看到
  • Python/Flask:应用程序在关闭后正在运行

    我正在开发一个简单的 Flask Web 应用程序 我使用 Eclipse Pydev 当我开发该应用程序时 由于代码更改 我必须经常重新启动该应用程序 这就是问题所在 当我运行该应用程序时 我可以在本地主机上看到该框架 这很好 但是当我想
  • 出现意外的关键字参数“timeout”(Python 中的 google-cloud-storage)

    使用 google cloud storage 的 Python 项目在本地运行良好 但是当它从 App Engine 运行时 会显示错误 Traceback most recent call last File opt python3 7
  • 如何创建指向指针数组的 Python ctypes 指针

    我需要学习如何处理char 在下面的 C 方法中通过 Python ctypes 我通过使用调用其他只需要单个指针的方法做得很好create string buffer 但此方法需要一个指向指针数组的指针 ladybugConvertToM
  • 将带有两层分隔符的字符串转换为字典 - python

    给定一个字符串 s x t1 ny t2 nz t3 我想转换成字典 sdic x 1 y 2 z 3 我通过这样做让它工作 sdic dict tuple j split t for j in i for i in s split n F
  • 散景中的时间序列流

    我想在散景中绘制实时时间序列 我只想在每次更新时绘制新的数据点 我怎样才能做到这一点 散景网站上有一个动画情节的示例 但它每次都需要重新绘制整个图片 另外 我正在寻找一个简单的示例 我可以在其中逐点绘制时间序列的实时绘图 散景效果0 11
  • 将 ASCII 字符转换为“”unicode 表示法的脚本

    我正在对 Linux 区域设置文件进行一些更改 usr share i18n locales like pt BR 并且需要格式化字符串 例如 d m Y H M 必须以 Unicode 指定 其中每个 在本例中为 ASCII 字符表示为
  • Scrapy - 不会爬行

    我正在尝试运行递归爬行 由于我编写的爬行不能正常工作 因此我从网络上提取了一个示例并进行了尝试 我真的不知道问题出在哪里 但是爬行没有显示任何错误 谁能帮我这个 另外 是否有任何逐步调试工具可以帮助理解蜘蛛的爬行流程 非常感谢任何与此相关的
  • 如何从c++调用python

    我是Python新手 我尝试像这样从 C 调用 python 脚本 在 Raspberry Pi 中 std string pythonCommand python Callee py a b int res system pythonCo
  • 通过套接字发送字符串(python)

    我有两个脚本 Server py 和 Client py 我心中有两个目标 能够从客户端一次又一次地向服务器发送数据 能够将数据从服务器发送到客户端 这是我的 Server py import socket serversocket soc
  • 带有整数的 np.sqrt 和 where 条件返回错误结果

    当我将 numpy sqrt 方法应用于带有 a 的整数数组时 我得到了奇怪的结果where健康 状况 见下文 对于整数 a np array 1 4 9 np sqrt a where a gt 5 Out 3 array 0 0 5 3
  • 构建 OpenCV 时出错 :: MonitorFromRect 未在此范围内声明

    我试图建立OpenCV version 2 4 8与它一起使用CodeBlocks and MinGw 我按照以下指示进行操作here http kevinhughes ca tutorials opencv install on wind

随机推荐

  • vue.js 中的过滤器和方法有什么区别?

    我想将时间戳转换为北京时间 我应该使用过滤器还是方法来实现此功能 有什么区别 比如性能上的区别 仅当基础时间戳更改时 显示的北京时间才需要更改 方法因此应该not be used https v2 vuejs org v2 guide co
  • 如何仅显示绘图中特定曲线子集的图例?

    t 0 0 01 2 pi s sin t c cos t m sin t hold on plot t s r plot t c b plot t m g hold off legend cosine 我的绘图中有几条曲线 我只想显示其中
  • 使用 LINQ 对对象列表进行分组

    我有一个对象 public class Customer public int ID get set public string Name get set public int GroupID get set 我返回一个可能如下所示的列表
  • docker-compose 中不同 docker 服务之间的通信

    我刚刚开始使用 docker compose 目前正在努力解决不同服务之间的通信问题 我有2个服务 alice and bob 我希望它们能够互相发送 http 请求 据我了解 服务应该能够通过使用服务名作为主机名来相互访问 很遗憾 ali
  • jQuery 将类添加到单选框未删除

    我使用 jQuery 将一个类添加到单选框 如果它被选中 这工作正常 但在选择另一个单选框时它不会删除该类 我缺少什么 jQuery checkbox radio change function if this is checked thi
  • 在 Visual Studio 中调试期间评估表达式

    我习惯了 Jetbrains IDEA 和 Java 但现在我有一个 NET C 项目并使用 Visual Studio 2017 社区 如果我在 IDEA 中调试代码 当执行在断点处停止时 我始终可以使用 IDE 的 评估表达式 功能来运
  • 从给定的 x86 程序集编写 C 函数

    我正在尝试对这个神秘的函数进行逆向工程 该函数返回一个整数并接受一个结构节点作为参数 include mystery h int mystery struct e4 struct s 头文件是一个简单的结构体声明 struct my str
  • Qt 应用程序:模拟模态行为(启用/禁用用户输入)

    我目前正在开发一个应用程序 该应用程序启动显示附加对话框的单独进程 我试图实现的功能是模拟这些对话框的模式行为 更具体地说 我需要应用程序在对话框启动时停止处理所有输入 包括鼠标和键盘 并在对话框关闭时恢复 对话框保持在应用程序顶部并不是那
  • 不使用 ASP.Net Core 2 中的迁移命令 Update-Database 创建数据库

    我使用 WebAPI 创建了新的 ASP Net core 项目 使用下面的链接 jwt authentication with aspnet core 2 web api angular 5 net core identity and f
  • 使 Java 应用程序对用户不可见

    我正在尝试找出一种方法使 Java 应用程序对用户不可见 基本上只是想删除this http screensnapr com e atyZkF png lt Image 如何才能做到这一点 public class TransparentW
  • 有人可以解释 Spring web.xml 文件吗?

    我是 Java Enterprise 和 Spring 的新手 但我对标准 Java 有很强的掌握 我正在查看一个现有的网络应用程序项目 该项目使用 Tomcat Spring Hibernate 据我所知这是相当常见的 它还使用 DWR
  • 如何在下次按下时聚焦下一个输入(如果有)

    我实际上知道如何做到这一点 但我需要一种不同的方法 所以我有如下文本输入
  • 如何在 macOS 上将 swiftUI 视图导出为 PDF 文件

    我需要在 macOS big sur 上将 swifUIview 导出为 PDF 文件 这是我正在使用的功能 func exportPDF let testView TestView let hostingView NSHostingVie
  • Vulkan 内存对齐要求

    我正在为 Vulkan 设备内存实现一个简单的内存管理器 并希望确保我了解内存的对齐要求以及如何满足这些要求 因此 假设我使用 vkAllocateMemory 分配了一个内存 池 并希望将该池中的内存块子分配给各个资源 基于 VkMemo
  • 全局定义分析器 (ES)

    我需要 想要在全球范围内定义我的自定义分析器 因此我根据这个答案编辑了ES的配置文件 elasticsearch yml 我可以自定义 Elastic Search 以使用我自己的停用词列表吗 https stackoverflow com
  • 在 ag-grid 上使用正确的单元格格式导出到 Excel

    当我使用 ag grid 自己的将表导出到 Excel 时exportDataAsExcel 生成的 Excel 包含日期为General数据类型而不是Date 我用过这个 exportDataAsExcel processCellCall
  • 如何将散点图中的异常值更改为其他颜色

    If I have a scatter plot like this 我想知道是否有任何方法可以将明显的异常值 例如顶部的三个 更改为同一图中的其他颜色 首先 您需要找到 异常值 的标准 一旦你有了这个 你就可以掩盖图中那些不需要的点 在
  • 如何从 JavaScript 调用小程序中声明的方法

    我正在尝试做一个基本的Java小程序 https en wikipedia org wiki Java applet为他们打开客户计算机上的文件 我想通过 JavaScript 调用下面 Java 小程序中的 openFile 函数 imp
  • 有没有办法比较两个会员的排名?

    我有一个 Discord 机器人 我正在编写警告命令 但我需要一个代码来比较两个成员 角色 的排名 例 A人的地位高于B人 如果 B 人试图警告 A 人 机器人会说 你不能警告这个人 如果 A 人试图警告 B 人 机器人就会警告 B 人 怎
  • 找到图像上的特定点

    我正在尝试编写一个程序来解决难题 我的尝试与我用来测试的示例谜题效果很好 现在我正在尝试为一个真正的谜题制作一个 这个新拼图的拼图块实际上没有正确的形状 我设法将图像变成黑白 最后变成 1 和 0 的数组 其中 1 表示片段 0 表示背景