计算卷积的最快速方法
有人知道计算卷积的最快方法吗?不幸的是,我处理的矩阵非常大(500x500x200),如果我在MATLAB中使用convn,则需要很长时间(我必须在嵌套循环中迭代此计算).因此,我使用FFT的卷积,现在更快.但是,我仍在寻找更快的方法.有什么想法吗? 解决方案 如果您的内核是可分离的,则将通过执行多个顺序1D卷积来实现最大的速度增长. MathWorks的Steve Eddins描述了如何利用卷积的关联性来加快卷积的速度,当内核在MATLAB上下文中可分开,他的博客.对于P-by-Q内核,执行两个单独的和顺序卷积的计算优势与2D卷积为PQ/(P+Q),对应于9x9内核的4.5倍,对于15x15内核,对应于4.5倍. 编辑:在 弄清楚内核是否可分离(即两个向量的外产物)博客继续描述如何检查您的内核是否与SVD分离以及如何获得1D内核.他们的例子是2D内核.有关n维可分离卷积的解决方案,请检查 . 另一种值得指出的资源是 cufft ),可能很难比Intel的实施更快,这
20 2023-09-03
编程技术问答社区
如何在OpenCV中检测已知物体?
我尝试实时在窗口中绘制形状.形状就像缠结,矩形,圆形,半圆或圆,以及屏幕上使用黄色的" Z".大小和形状可能与原始图像不一样.但是程序知道所有原始形状.因为它们是预定义的.我想知道如何识别正确的形状.例如, 有可能做到这一点吗?我可以为此使用模板匹配吗?请帮助我.. 解决方案 您可以使用不同的方法来检测每个形状.检查以下: 用OpenCV检测椭圆形 正方形检测找不到正方形
6 2023-08-31
编程技术问答社区
单个模板与多个源图像的模板匹配
我有一个模板" x"(符号),该模板是从" Image1"中裁剪出来的.我使用OpenCV的MatchTemplate()方法将模板" X"与" Image1"匹配,并且成功地匹配了模板.但是,我还有另一个称为" Image2"的图像,其中包含X符号,但是当我使用模板" X"与" Image2"匹配时,它显示了无效的匹配.任何帮助将不胜感激. def match_template(img_path, img_template_path): if img_path is not None: img = cv.imread(img_path, 0) if img is not None: template = cv.imread(img_template_path, 0) temp_h, temp_w, img_h, img_w = None, None, None, None
8 2023-07-22
编程技术问答社区
python opencv 如何为具有不同颜色和亮度的相同形状匹配模板
IM使用MatchTemplate在黑暗背景上检测2x2 SQAURE.使用我的代码,它可以检测到大多数正方形,没有任何问题,但无法检测到正方形的颜色何时深黑又黑.我尝试了openCV的标准化,但是它不能很好地工作..也尝试使用掩码,但它也没有起作用(也许我使用了错误的功能?) 由于我缺乏理解图像预处理和OPENCV.我相信我缺少很多东西,但我无法弄清楚我缺少什么.如果有人可以帮助我 ,我真的很感激 import cv2 import numpy as np import time import win32gui, win32ui, win32con def imagesearch(per): img = cv2.imread('target.png', cv2.IMREAD_GRAYSCALE) img1 = cv2.imread('target.png') template = cv2.imread('./map/monster.png
2 2023-07-22
编程技术问答社区
Python图像库中的模板匹配(图像搜索)功能
我遇到了一个问题,我需要在另一个图像(也作为numpy ndarray)中搜索模式(以numpy ndarray为单位)并计算模板匹配(图像中的最小差异位置).我的问题是...我可以在python成像库或numpy中使用任何内置图像,或者在不手动编写函数的情况下可以执行此操作的任何可能执行此操作的图像? 谢谢.... 解决方案 这最好作为反卷积或相关性完成. numpy/scipy具有同时执行的代码. 编辑:包括一个小例子. 请访问ipython笔记本文件: http://nbviewer.ipython.org/4020770/a/a > 我做了一点高斯,然后使用scipy.signal.correlate2d与原始图像和一个小子集. 您可以看到,相关的最高值集中在拍摄图像子集的位置.请注意,对于大型内核或图像,此代码可能需要一段时间(因为相关性很高)
4 2023-07-15
编程技术问答社区
用多个对象进行模板匹配 opencv python
我有一个类似的扫描图像文档: 使用普通的扫描引擎对图像进行扫描,以便将文档歪曲.图像已经进行了二进制过程,因此仍然有一点噪音.我想知道该模板的位置在图片中的位置. 这是模板: 我的预期结果是图像文档中模板的位置坐标,以这样的数组形式: [[35,1532], [1923,20], [1923,1532]] 如果结果正确,我需要线索,例如匹配模板周围的框 我尝试了此代码: img = cv2.imread('image_document.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) template = cv2.imread('template.jpg',0) # run template matching, get minimum val res = cv2.matchTemplate(gray, template, cv2.TM_SQDIFF_NORMED) min_val, max_val, min_lo
22 2023-07-09
编程技术问答社区
用Python/OpenCV从图像中提取固定数量的方块
我想使用Python/OpenCV计算几个扫描图像.这些图像中的每一个(请参见下面的示例)包含n行彩色正方形.这些正方形中的每一个都有相同的尺寸.目的是裁剪每个正方形并从中提取数据. 我找到了这是我使用的代码: import numpy as np import cv2 from matplotlib import pyplot as plt def angle_cos(p0, p1, p2): import numpy as np d1, d2 = (p0-p1).astype('float'), (p2-p1).astype('float') return abs( np.dot(d1, d2) / np.sqrt( np.dot(d1, d1)*np.dot(d2, d2) ) ) def find_squares(img): import cv2 as cv import numpy as np img = cv
28 2023-07-07
编程技术问答社区
查找接近重复和伪造的图像
我正在使用知觉哈希技术来查找近乎缩写和精确的图像.该代码非常适合查找精确的图像.但是,查找近乎修改和稍微修改的图像似乎很困难.由于它们的哈希之间的差分通常与完全不同随机图像的哈希差异相似. 为了解决这个问题,我试图将近乎插图图像的像素化为50x50像素,并使它们成为黑色/白色,但我仍然没有我需要的东西(小差异分数). 这是一个接近重复的图像对的样本: 图像1(a1.jpg): 图像2(b1.jpg): 这些图像的哈希分数之间的差异为:24 当Pixeld(50x50像素)时,它们看起来像这样: rs_a1.jpg rs_b1.jpg 像素图像的哈希差异得分更大! :26 下面按照@Ann Zen的要求: 的另外两个近重复图像对示例 配对1 配对2 我用来减少图像大小的代码是: from PIL import Image with Image.open(image_path) as image:
2 2023-06-30
编程技术问答社区
在OpenCV中用多个对象进行模板匹配 Python
我正在尝试使用opencv python在图像中找到多个模板.html" rel =" noreferrer">此链接. ,但问题在于,单个对象返回了多个点,其位置略有差异. 这样的东西: 我不想使用cv2.minMaxLoc(),因为图像中有多个模板. 我写了一个删除近距离位置的函数,但是我想知道这个问题有任何直接解决方案吗? 谢谢. 解决方案 找到多个匹配的一种方法是在发现的匹配项上写下并再次运行匹配. 编辑:A 更好的 找到多个匹配的方法是在 结果上写入.在第一个示例中,我们将结果的匹配部分填充为零(使用SQDIFF或CCORR_NORMED的部分),然后在循环中查找下一场比赛. import cv2 import numpy as np import time image = cv2.imread('smiley.png', cv2.IMREAD_COLOR ) template = cv2.imread('template.png', cv2.IMR
10 2023-06-27
编程技术问答社区
处理一个表格的图像,以获得其中的数据
我有一个表的图像(如下所示).我正在尝试从表格中获取数据,类似于此表格(表图的第一行): rows[0] = [x,x, , , , ,x, ,x,x, ,x, ,x, , , , ,x, , , ,x,x,x, ,x, ,x, , , , ] 我需要X的数量以及空间的数量. 还将有其他与此相似的表图像(所有具有X和相同数量的列). 到目前为止,我能够使用X的图像来检测所有X.我可以在某种程度上检测到线条.我正在为Python使用开放的CV2.我还使用houghtransform来检测水平和垂直线(这真的很好). 我试图弄清楚我如何行行行列并将信息存储在列表中. 这些是训练图像: 用于检测x(代码中的train1.png) 用于检测行(代码中的train2.png) 用于检测行(代码中的train3.png) 这是我到目前为止的代码: # process images from pytesser import * from PIL im
2 2023-06-25
编程技术问答社区
了解和评估模板匹配方法
openCV具有matchTemplate()函数,该功能通过在输出上滑动模板输入并生成对应于匹配的数组输出来运行. 我可以在哪里了解有关如何解释六个我已经根据例如(取自教程) res = cv.matchTemplate(img_gray, template, cv.TM_CCOEFF_NORMED) threshold = 0.8 loc = np.where(res >= threshold) 和 我会推断TM_CCOEFF_NORMED将返回0到1之间的值,并且0.8阈值是任意的,但这只是假设. 是否有更深入的潜水在线方程,针对标准数据集的绩效测量,或有关不同模式的学术论文以及何时以及为什么使用彼此使用? 解决方案 所有模板匹配模式都可以大致分类为密集(含义)相似度度量,也可以等效地但相反,a dange metric 图像之间. 通常,您将有两个图像,并且想以某种方式进行比较.在蝙蝠上,模板匹配并不能直接帮助您匹配被缩放,旋转或扭曲的内
12 2023-06-24
编程技术问答社区
改善一个图像的许多模板匹配/寻找图像上的字符
这个想法: 我有一个屏幕截图,想在此图像上找到所有字符和数字.最简单的方法是使用openCV匹配模板并比较所有字符(大约800),我将" .png"与屏幕截图进行比较. . myTemplatesPath = "C:/MyPath/Templates/" allTemplateFiles = [os.path.join(root, name) for root, dirs, files in os.walk(myTemplatesPath) for name in files] Templates_all = [cv2.imread(f, cv2.IMREAD_GRAYSCALE) for f in allTemplateFiles] imgrey = cv2.cvtColor(screenshot, cv2.COLOR_BGR2GRAY) for template in Templates_all: results = cv2.matchTemplat
8 2023-05-22
编程技术问答社区
使用OpenCV的deno模板匹配没有结果
我正在尝试使用通过遵循源代码,我首先偶然发现error: Uncaught (in promise) TypeError: Cannot convert "undefined" to int cv.matFromImageData(imageSource). 实验和搜索后,我发现功能期望{数据:uint8clampedarray,高度:数字,宽度:number:}.这基于 so Post so so so post 可能是不正确的,因此发布它在这里. 我目前遇到的问题是,我似乎没有从模板中获得适当的匹配.只有当我将阈值设置为0.1或更低时,我才会得到匹配,但这不是正确的{ xStart: 0, yStart: 0, xEnd: 29, yEnd: 25 }. 我使用了由TemplateMutching示例提供的图像 对此的任何输入/想法都将不胜感激. import { cv } from 'https://deno.land/x/opencv@v4.3.0-10
6 2023-05-22
编程技术问答社区
不同方法的OpenCV matchTemplate阈值
我在寻找以下方法的阈值时搜索了很多. methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR', 'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', cv2.TM_SQDIFF_NORMED'] 我还尝试自己弄清楚它们,但我只能找到3种最大值1.0的方法的阈值.其他方法值在10^5范围内.我想知道这些方法的界限. 有人可以将我指向正确的方向.我的议程是循环浏览所有模板匹配的方法并获得最佳结果.我经历了文档和源代码,但没有运气. 这些是我得到的值,我可以理解 *范式的方法具有值0-1. cv2.TM_CCOEFF -- 25349100.0 cv2.TM_CCOEFF_NORMED -- 0.31208357214927673 cv2.TM_CCORR -- 616707328.0 cv2.TM_CCORR_NORMED -- 0.90
60 2023-05-10
编程技术问答社区
如何用matchTemplate根据一个共同的特征来对齐两张图片
我有两个与重叠的图像.我想对齐这两个图像.我当前的方法是在这两个图像中找到一个共同的功能(标记).然后,我想根据特征重叠的地方对齐这两个图像. 这些图像并不完美,因此我正在寻找一种将基于"最佳"拟合(最重叠)对齐的方式.最初,我尝试使用通过SIFT进行匹配来对齐图像,但功能匹配通常不正确/太少. 这是我用来找到template = cv2.imread('template.png', 0) template = template - cv2.erode(template, None) image1 = cv2.imread('Image to align1.png') image2 = cv2.imread('Image to align2.png') image = image2 img2 = image[:,:,2] img2 = img2 - cv2.erode(img2, None) ccnorm = cv2.matchTemplate(img2, template,
40 2023-05-10
编程技术问答社区
在javacv中使用匹配模板在图像中寻找特定区域的图像
我试图在另一个特定区域内找到图像的位置.我正在使用JavACV来解决这个问题.但是我的代码在执行 cvmatchtemplate 函数时会出现错误.我想我想念使用 cvsetimageroi . 这就是我的使用方式: public static void main(String c[]) { IplImage src = cvLoadImage("test.jpg", 0); IplImage tmp = cvLoadImage("tmp.png", 0); IplImage result = cvCreateImage(cvSize(src.width() - tmp.width() + 1, src.height() - tmp.height() + 1), IPL_DEPTH_32F,1); cvZero(result); cvSetImageROI(src, ne
112 2023-05-10
编程技术问答社区
如何调整openCV(java)中模板匹配的阈值?
我正在使用OpenCV 3.4.7 Android SDK(Java)运行模板匹配. 该代码几乎完美地工作;匹配模板时,它会在匹配区域绘制矩形.问题是,即使没有匹配,也会绘制一个随机的矩形.我认为发生这种情况是因为阈值无法正确设置.如果是这样,有人可以帮我吗? 这是代码: public static void run(String inFile, String templateFile, String outFile, int match_method) { Mat img = Imgcodecs.imread(inFile); Mat templ = Imgcodecs.imread(templateFile); // / Create the result matrix int result_cols = img.cols() - templ.cols() + 1;
54 2023-05-10
编程技术问答社区
基于OpenCV边缘的物体检测C++
我有一个应用程序,必须在场景中检测到某些项目的存在.这些项目可以旋转并略微缩放(更大或更小).我已经尝试使用KeyPoint探测器,但它们不够快速,还不够准确.因此,我决定使用Canny(或更快的边缘检测算法)在模板和搜索区域中首先检测边缘,然后匹配边缘以找到匹配的位置,方向和大小. 所有这些都需要在不到一秒钟的时间内完成. 我已经尝试使用matchTemplate()和matchShape(),但前者并不是尺度和旋转不变的,而后者与实际图像的运行不佳.旋转模板映像以匹配也很耗时. 到目前为止,我已经能够检测模板的边缘,但我不知道如何与场景匹配. 我已经经历了以下内容,但无法让它们工作(它们要么使用OpenCV的旧版本,要么是与演示中的其他图像一起使用的其他图像): 在/基于边缘的 - 板匹配 使用OpenCV /p> 有人可以向我建议我的方法吗?或者如果可能的话,可以将代码剪切? 这是我的样品输入图像(要检测到的零件以红色标记) 这
78 2023-05-10
编程技术问答社区
使用CV_TM_CCORR_NORMED的openCV模板匹配
我有这个代码 cvMatchTemplate(image2, templat2, result, CV_TM_CCORR_NORMED); 如果有匹配,我该如何使程序执行以下行: double min_val, max_val; CvPoint min_loc, max_loc; cvMinMaxLoc(result, &min_val, &max_val, &min_loc, &max_loc); cvRectangle(image3, max_loc, cvPoint(max_loc.x+templat->width, max_loc.y+templat->height), cvScalar(0,1,1), 1); 谢谢. 解决方案 您需要一起执行CVMatchTemplate和CVMinmaxLoc: cvMatchTemplate(image2, templat2, result, CV_TM_CCORR_NORMED); double m
36 2023-05-10
编程技术问答社区