我需要在字符串中找到最长的序列,但需要注意序列必须重复三次或更多次.所以,例如,如果我的字符串是:
fdwaw4helloworldvcdv1c3xcv3xcz1sda21f2sd1ahelloworldgafgfa4564534321fadghelloworld
然后我想要返回值" helloworld ".
我知道有几种方法可以实现这个目标,但我面临的问题是实际的字符串非常大,所以我真的在寻找一种可以及时完成的方法.
在opencv的python2包装器中,似乎与"getPerspectiveTransform"相冲突.首先,它需要两个参数而不是预期的三个参数.
而不是第一个包装器:
cv.GetPerspectiveTransform(source,destination,3x3mat)
Run Code Online (Sandbox Code Playgroud)
下雪了:
cv2.getPerspectiveTransform(?,?)
Run Code Online (Sandbox Code Playgroud)
如果我尝试将两组四个四角顶坐标作为参数放入,如下所示:
cv2.getPerspectiveTransform(first_set_of_corners, second_set_of_corners)
Run Code Online (Sandbox Code Playgroud)
它吐出以下错误:
cv2.error: C:\slave\WinInstallerMegaPack\src\opencv\modules\imgproc\src\imgwarp.
cpp:3194: error: (-215) src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV
_32F) == 4
Run Code Online (Sandbox Code Playgroud)
如果checkVectors不应该等于四(因此四边形中的"四边形"),那么我不确定它对我的要求.与python2包装器中的其他内容一样,此功能完全没有记录,因此我不知道它是否已损坏,或者更可能是我做错了.有没有人设法让这个正常工作?
我需要能够比较两个图像并提取任何独特的像素来创建第三个图像.为此,我做了以下事情:
import cv2
import numpy as np
img = cv2.imread("old.jpg")
img2 = cv2.imread("new.jpg")
image2 = cv2.cvtColor(img2, cv2.COLOR_RGB2RGBA)
for (x,y,z), value in np.ndenumerate(img):
dif = img[x,y,0] == img2[x,y,0] #only checking one color for speed
diff = str(dif)
if "True" in diff:
image2[x,y,3] = 0
cv2.imwrite("result.png", image2)
Run Code Online (Sandbox Code Playgroud)
这个效果相当不错,但640 x 480的图片花了大约10秒钟,我希望能让它接近大约一半的时间.所以我改变了这一行:
dif = img[x,y,0] == img2[x,y,0]
Run Code Online (Sandbox Code Playgroud)
至
dif = np.in1d(img[x,y,0], img2[x,y,0])
Run Code Online (Sandbox Code Playgroud)
结果是相同的,但现在大约需要3分钟,而不是加快速度.我完全失去了原因.
我意识到迭代大型数组中的元素在python中会很费时但是为什么in1d这么慢?
(作为旁注,我只会使用" 调色板方法 ",但由于我对numpy数组的了解有限,我无法看到为此目的实现它的方法.)