我正在尝试在OpenCV-Python(cv2)中实现"数字识别OCR".它仅用于学习目的.我想在OpenCV中学习KNearest和SVM功能.
我有每个数字的100个样本(即图像).我想和他们一起训练.
letter_recog.py
OpenCV示例附带了一个示例.但我仍然无法弄清楚如何使用它.我不明白什么是样本,响应等.另外,它首先加载一个txt文件,我首先不明白.
稍后搜索一下,我可以在cpp示例中找到一个letter_recognition.data.我使用它并在letter_recog.py模型中为cv2.KNearest创建了一个代码(仅用于测试):
import numpy as np
import cv2
fn = 'letter-recognition.data'
a = np.loadtxt(fn, np.float32, delimiter=',', converters={ 0 : lambda ch : ord(ch)-ord('A') })
samples, responses = a[:,1:], a[:,0]
model = cv2.KNearest()
retval = model.train(samples,responses)
retval, results, neigh_resp, dists = model.find_nearest(samples, k = 10)
print results.ravel()
Run Code Online (Sandbox Code Playgroud)
它给了我一个20000的数组,我不明白它是什么.
问题:
1)letter_recognition.data文件是什么?如何从我自己的数据集构建该文件?
2)什么results.reval()
表示?
3)我们如何使用letter_recognition.data文件(KNearest或SVM)编写简单的数字识别工具?
我正在做一个有趣的项目:使用OpenCV从输入图像中解决数独(如Google护目镜等).我完成了任务,但最后我发现了一个问题,我来到这里.
我使用OpenCV 2.3.1的Python API进行编程.
以下是我的所作所为:
找到角点.
例如,如下:
(请注意,绿线正确地与Sudoku的真实边界重合,因此可以正确扭曲数独.查看下一张图片)
将图像扭曲成完美的正方形
例如:
执行OCR(我使用我在OpenCV-Python中的简单数字识别OCR中给出的方法)
而且方法效果很好.
问题:
看看这个图像.
在此图像上执行第4步,结果如下:
绘制的红线是原始轮廓,它是数独边界的真实轮廓.
绘制的绿线是近似轮廓,它将是扭曲图像的轮廓.
当然,在数独的上边缘绿线和红线之间存在差异.因此,在翘曲时,我没有得到数独的原始边界.
我的问题 :
如何在数独的正确边界上扭曲图像,即红线,或者如何消除红线和绿线之间的差异?在OpenCV中有没有这方法?
嗨,我正在创建一个程序,用其他人的脸取代图像中的脸部.但是,我一直试图将新面孔插入原始的较大图像中.我已经研究了ROI和addWeight(需要图像大小相同),但我还没有找到一种方法在python中做到这一点.任何建议都很棒.我是opencv的新手.
我使用以下测试图像:
smaller_image:
larger_image:
这是我的代码到目前为止...其他样本的混合器:
import cv2
import cv2.cv as cv
import sys
import numpy
def detect(img, cascade):
rects = cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=3, minSize=(10, 10), flags = cv.CV_HAAR_SCALE_IMAGE)
if len(rects) == 0:
return []
rects[:,2:] += rects[:,:2]
return rects
def draw_rects(img, rects, color):
for x1, y1, x2, y2 in rects:
cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)
if __name__ == '__main__':
if len(sys.argv) != 2: ## Check for error in usage syntax
print "Usage : python faces.py <image_file>"
else:
img …
Run Code Online (Sandbox Code Playgroud) 几天前,我开始使用新的OpenCV-Python界面cv2
.
我的问题是关于比较cv
和cv2
界面.
关于易用性,新cv2
界面的改进程度要大得多,而且使用起来非常简单有趣cv2
.
但速度怎么样?
我制作了两个小码密码,一个在cv
另一个cv2
,用于检查性能.两者都具有相同的功能,访问图像的像素,测试它,进行一些修改等.
以下是代码:
cv2 interface
:
import time
import numpy as np
import cv2
gray = cv2.imread('sir.jpg',0)
width = gray.shape[0]
height = gray.shape[1]
h = np.empty([width,height,3])
t = time.time()
for i in xrange(width):
for j in xrange(height):
if gray[i,j]==127:
h[i,j]=[255,255,255]
elif gray[i,j]>127:
h[i,j]=[0,0,255-gray[i,j]]
else:
h[i,j]=[gray[i,j],0,0]
t2 = time.time()-t
print "time taken = ",t2
Run Code Online (Sandbox Code Playgroud)
================================================== ===
结果是:
所用时间= 14.4029130936
================================================== ====
cv界面:
import cv,time …
Run Code Online (Sandbox Code Playgroud) 这个问题与这个问题有关: How to remove convexity defects in sudoku square
我是想实现nikie's answer
在Mathematica to OpenCV-Python
.但我陷入了程序的最后一步.
即我得到了正方形的所有交叉点,如下所示:
现在,我想将其转换为一个完美的大小正方形(450,450),如下所示:
(不要介意两个图像的亮度差异).
问题:
如何在OpenCV-Python中执行此操作?我正在使用cv2
版本.
我有一个谜题,我想用Python解决它.
难题:
一个商人的重量为40公斤,他在他的店里使用.有一次,它从他的手上掉下来,分成4块.但令人惊讶的是,现在他可以通过这4件的组合称重1公斤到40公斤之间的任何重量.
所以问题是,这4件的重量是多少?
现在我想用Python解决这个问题.
我从拼图中得到的唯一约束是4个总和是40.我可以过滤掉总和为40的所有4个值的集合.
import itertools as it
weight = 40
full = range(1,41)
comb = [x for x in it.combinations(full,4) if sum(x)==40]
Run Code Online (Sandbox Code Playgroud)
length of comb = 297
现在我需要检查每组值comb
并尝试所有操作组合.
例如,如果(a,b,c,d)
是第一组值comb
,我需要检查a,b,c,d,a+b,a-b, .................a+b+c-d,a-b+c+d........
,依此类推.
我尝试了很多,但我陷入了这个阶段,即如何检查所有这些计算组合到每组4个值.
题 :
1)我想我需要列出所有可能的组合[a,b,c,d] and [+,-]
.
2)有没有人有更好的想法,告诉我如何从这里前进?
另外,我想完全没有任何外部库的帮助,只需要使用python的标准库.
编辑:对不起,迟到的信息.答案是(1,3,9,27),这是我几年前发现的.我检查并验证了答案.
编辑:目前,fraxel
答案是完美的time = 0.16 ms
.总是欢迎更好,更快的方法.
问候
方舟
我只是试图使用新的OpenCV Python接口(cv2)绘制直方图.
以下是我试过的代码:
import cv2
import numpy as np
import time
img = cv2.imread('zzz.jpg')
h = np.zeros((300,256,3))
b,g,r = cv2.split(img)
bins = np.arange(256).reshape(256,1)
color = [ (255,0,0),(0,255,0),(0,0,255) ]
for item,col in zip([b,g,r],color):
hist_item = cv2.calcHist([item],[0],None,[256],[0,255])
cv2.normalize(hist_item,hist_item,0,255,cv2.NORM_MINMAX)
hist=np.int32(np.around(hist_item))
pts = np.column_stack((bins,hist))
cv2.polylines(h,[pts],False,col)
h=np.flipud(h)
cv2.imshow('colorhist',h)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)
它工作正常.以下是我获得的结果直方图.
然后我修改了一点代码.
b,g,r = cv2.split(img)
即将代码中的第六行更改为b,g,r = img[:,:,0], img[:,:,1], img[:,:,2]
(因为它的工作速度稍快cv2.split
).
现在输出是不同的.以下是输出.
我检查了b,g,r
两个代码的值.他们是一样的.
差异在于产量cv2.calcHist
.hist_item
两种情况的结果都不同.
问题:
怎么会发生?cv2.calcHist
当输入相同时,为什么结果不同?
编辑
我尝试了不同的代码.现在,我的第一个代码的numpy版本.
import cv2
import numpy as np …
Run Code Online (Sandbox Code Playgroud) 我想在PyQt中实现一个简单的按钮,在单击时打印"Hello world".我怎样才能做到这一点?
我是PyQt的真正新手.
我的一位朋友正在研究以下项目:
下面是不锈钢表面的微观(SEM)图像.
但你可以看到,它被腐蚀了一点(长时间暴露在海洋环境中)并且在表面形成了一些凹坑.一些坑被标记为红色圆圈.
他需要在图像中找到凹坑数量并且他手动计算它(想象一下,有近150张图像).所以我想到用任何图像处理工具自动化这个过程.
题:
如何在此图像中找到凹坑数?
我尝试了什么:
作为第一步,我通过关闭操作稍微改善了对比度.
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('6.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))
close = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
close2 = cv2.add(close,1)
div = (np.float32(gray)+1)/(close2)
div2 = cv2.normalize(div,None, 0,255, cv2.NORM_MINMAX)
div3 = np.uint8(div2)
Run Code Online (Sandbox Code Playgroud)
结果:
然后我为127应用了一些阈值并在其中找到轮廓.之后这些轮廓根据它们的面积进行过滤(没有关于该区域的具体信息,我将1-10的范围作为经验值).
ret, thresh = cv2.threshold(div3, 127,255, cv2.THRESH_BINARY_INV)
temp, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
res = np.zeros(gray.shape,np.uint8)
for cnt in contours:
if 1.0 < cv2.contourArea(cnt) < 10.0:
res = cv2.drawContours(res, …
Run Code Online (Sandbox Code Playgroud) 有没有人知道使用非恢复除法划分无符号二进制整数的步骤?
很难在网上找到任何好的消息来源.
即如果A = 101110
和B = 010111
我们如何A divided by B
在非恢复部门找到?寄存器在每一步中都是什么样的?
谢谢!
python ×8
opencv ×7
numpy ×2
addition ×1
algorithm ×1
binary ×1
bits ×1
button ×1
combinations ×1
division ×1
histogram ×1
matlab ×1
ocr ×1
performance ×1
permutation ×1
puzzle ×1
pyqt ×1
pyqt4 ×1
scikit-image ×1
sudoku ×1