- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我真的很难过这一点,任何帮助将不胜感激。我正在尝试翻译以下内容:
https://github.com/MicrocontrollersAndMore/OpenCV_KNN_Character_Recognition_Machine_Learning/blob/master/generate_data.cpp
它是用 C++ OpenCV 编写的,到 Emgu CV,最好使用 VB,但 C# 也可以。我目前正在使用 Emgu CV 2.4.10(推迟到 >= 3.X 直到 Emgu 3.X 通过发布候选阶段)。
我遇到麻烦的地方是接近尾声,必须将训练图像添加到 OpenCV 矩阵中,然后才能将该矩阵传递给 KNN 调用进行训练。这是我到目前为止在按钮单击事件中打开带有培训编号的文件的内容:
Dim imgTrainingNumbers As Image(Of Bgr, Byte)
imgTrainingNumbers = New Image(Of Bgr, Byte)(ofdOpenFile.FileName) 'open image
'some error checking for verifying the image opened omitted here, its in the actual program
Dim imgGrayscale As Image(Of Gray, Byte)
Dim imgBlurred As Image(Of Gray, Byte)
Dim imgThresh As Image(Of Gray, Byte) = Nothing
Dim imgThreshCopy As Image(Of Gray, Byte)
Dim imgContours As Image(Of Gray, Byte)
Dim contours As Contour(Of Point)
Dim mtxClassificationInts As Matrix(Of Single) = New Matrix(Of Single)(NUMBER_OF_TRAINING_SAMPLES, 1)
Dim mtxTrainingImages As Matrix(Of Single) = New Matrix(Of Single)(RESIZED_IMAGE_WIDTH * RESIZED_IMAGE_HEIGHT * NUMBER_OF_TRAINING_SAMPLES, 1)
Dim intValidChars As New List(Of Integer)(New Integer() { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 })
imgGrayscale = imgTrainingNumbers.Convert(Of Gray, Byte)() 'convert to grayscale
imgBlurred = imgGrayscale.SmoothGaussian(5)
CvInvoke.cvShowImage("imgBlurred", imgBlurred)
imgThresh = imgBlurred.ThresholdAdaptive(New Gray(255), ADAPTIVE_THRESHOLD_TYPE.CV_ADAPTIVE_THRESH_GAUSSIAN_C, THRESH.CV_THRESH_BINARY_INV, 11, New Gray(2))
imgThreshCopy = imgThresh.Clone()
contours = imgThreshCopy.FindContours(CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, RETR_TYPE.CV_RETR_EXTERNAL)
imgContours = New Image(Of Gray, Byte)(imgThresh.Size())
CvInvoke.cvDrawContours(imgContours, contours, New MCvScalar(255), New MCvScalar(255), 100, 1, LINE_TYPE.CV_AA, New Point(0, 0))
CvInvoke.cvShowImage("imgThresh", imgThresh)
CvInvoke.cvShowImage("imgContours", imgContours)
While(Not contours Is Nothing)
If (contours.Area > MIN_CONTOUR_AREA) Then
Dim rect As Rectangle = contours.BoundingRectangle() 'get the bounding rect
imgTrainingNumbers.Draw(rect, New Bgr(Color.Red), 2) 'draw red rect around the current char
Dim imgROI As Image(Of Gray, Byte) = imgThresh.Copy(rect)
Dim imgROIResized As Image(Of Gray, Byte) = imgROI.Resize(RESIZED_IMAGE_WIDTH, RESIZED_IMAGE_HEIGHT, INTER.CV_INTER_LINEAR)
CvInvoke.cvShowImage("imgROI", imgROI)
CvInvoke.cvShowImage("imgROIResized", imgROIResized)
CvInvoke.cvShowImage("imgTrainingNumbers", imgTrainingNumbers)
Dim intChar As Integer = CvInvoke.cvWaitKey(0)
If (intChar = 27) Then
'add code to exit program here if Esc is pressed
ElseIf (intValidChars.Contains(intChar)) Then
mtxClassificationInts.Add(intChar) 'append classification char to matrix of integers (we will convert later before writing to file)
'now add the training image (some conversion is necessary first) . . .
Dim mtxTemp As Matrix(Of Single) = New Matrix(Of Single)(imgROIResized.Size())
Dim mtxTempReshaped As Matrix(Of Single) = New Matrix(Of Single)(imgROIResized.Size())
CvInvoke.cvConvert(imgROIResized, mtxTemp)
mtxTempReshaped = mtxTemp.Reshape(1, 1)
Try
mtxTrainingImages.Add(mtxTempReshaped)
Catch ex As Exception
txtInfo.Text = txtInfo.Text + ex.Message + vbCrLf
End Try
End If
End If
contours = contours.HNext
End While
Me.Text = "training complete !!"
'write mtxClassificationInts to file here
'write mtxTrainingImages to file here
'separate write and read into two separate programs when all this is working
'read mtxClassificationInts to file
'read mtxTrainingImages to file
Dim kNearest As KNearest = New KNearest() 'instantiate KNN object
kNearest.Train(mtxTrainingImages, mtxClassificationInts, Nothing, False, 1,False) 'call to train
'rest of program here when training is successful
mtxTrainingImages.Add(mtxTempReshaped)
OpenCV: The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array'
最佳答案
我相信错误消息告诉您 mtxTrainingImages 和 mtxTempReshape 是不同的大小和/或具有不同数量的 channel 。如果这两个创建相同,您将不会遇到此问题。
关于vb.net - Emgu CV,无法将图像添加到矩阵以进行 KNN 训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31041266/
我到处都找了很多,找不到我的问题的答案。我试图从这个线程复制一个文本检测软件(Extracting text OpenCV)但是在代码的末尾有一条消息错误说没有匹配的矩形,即使我已经在上面绘制了一个并
我已经彻底搜索过,但没有找到直接的答案。 将 opencv 矩阵 (cv::Mat) 作为参数传递给函数,我们传递的是智能指针。我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵。 我读
在我的应用程序中,我有一个通过引用接收 cv::Mat 对象的函数。这是函数的声明: void getChains(cv::Mat &img,std::vector &chains,cv::
我正在使用 Qt 编写一个 GUI 程序,并使用 OpenCV 进行一些视频处理。我在主 GUI 线程的标签中显示 OpenCV 进程(在单独的线程中)的结果。 我遇到的问题是 cv::waitKey
Mat a = (Mat_(3,3) = 2 int dims; //! the number of rows and columns or (-1, -1) when the arr
我尝试运行下面的代码,但出现错误。我正在为名为“Mat::at”的 OpenCV 函数创建一个包装器,并尝试使用“G++”将其编译为 Ubuntu Trusty 上的“.so”。我在下面列出了“.cp
我在 C# 中使用 EmguCV,当我想从网络摄像头抓取帧时遇到问题,语句中出现红色下划线: imgOrg = capturecam.QueryFrame(); error: Cannot impli
我正在尝试从另外两个矩阵生成一个 cv::Mat C,以便获得第三个矩阵,该矩阵由通过组合矩阵 A 和 B 的一维点生成的二维点构成。 我的问题是,我尝试的所有操作都只是连接矩阵,并没有真正将每个点与
我用 cv.imread在 python 中读取 png 文件。然后当我使用 cv.imwrite立即保存图像的功能我然后发现图像中的颜色略有变化。我正在尝试在此图像上执行字符识别,而 OCR 在 p
我尝试将 cv::bitwise_not 转换为 double 值的 cv::Mat 矩阵。我申请了 cv::bitwise_not(img, imgtemp); img是0和1的CV_64F数据。但
我正在尝试使用函数 cv.glmnet 找到最佳的 lambda(使用 RIDGE 回归)以预测某些对象的归属类别。所以我使用的代码是: CVGLM<-cv.glmnet(x,y,nfolds=34,
我有这个方法: static void WriteMatVect(const std::string& filename, const std::vector& mats); ... void Fil
下面的转换是我想要做的。 对于源图像中的每个图 block ,我知道每个角的坐标,并且我知道输出图像中每个对应角的坐标,所以我可以调用 cvWarpPerspective 扭曲每个图 block ,然
我必须在C++ / CLI中的托管和非托管代码中都使用OpenCV。 我正在尝试在托管代码中使用Emgu CV来包装OpenCV对象,但是在进行转换时遇到了麻烦。 我该怎么做: Emgu::CV::M
我正在尝试在 cv::Mat 中使用 CV_32FC4,以便它存储 RGBA32 图像。但是当我使用 cv::imwrite 将其保存为 png 文件时,结果文件始终是一个空图像。 例如,我创建了这样
无法在 VS 2017 中设置 OpenCV。我做错了什么?是的,我已将所有其他帖子设为红色。 代码: #include "opencv2/highgui/highgui.hpp" u
我有两个(相同大小,相同类型)cv:Mat 让我们称它们为 A,B。我还有另一个 cv::Mat,它是一个掩码(0 和 1 值或其他值,0 和 255 也适用)让我们称它为 M。 我需要构造一个新的
使用 OpenCV 中实现的 Scalar 类,我不明白这段代码有什么区别: Mat test; test = Scalar::all(0); 还有这个: Mat test = Scalar::all
我对这行代码感到困惑: cv::Mat_::iterator 我知道 Mat_ 属于 cv 命名空间和 vec3b 也。但是之后的最后一个 :: 操作符和 iterator 让我感到困惑!它也属于 c
我想优雅地将 Mat 转换为 Vec3f。目前我是这样做的: Mat line; Vec3f ln; ln[0] = line.
我是一名优秀的程序员,十分优秀!