我目前正在开展一个项目,我们有一组用相机拍摄的卡车照片.我需要检测它是什么类型的卡车(它有多少个轮子).所以我正在使用EMGU试图检测到这一点.
我遇到的问题是我似乎无法使用EMGU的HoughCircle检测来检测车轮,它没有检测到所有车轮,也会检测到树叶中的随机圆圈.
所以我不知道接下来我应该尝试什么,我尝试实施SURF算法以匹配它们之间的轮子但这似乎不起作用,因为它们不完全相同,有没有办法我可以实现"松散" SURF算法?
这就是我的开始.
这是Hough Circle检测后得到的结果.许多错误的检测,有些甚至没有接近圆形,并且由于某种原因后轮被检测为单个.

是否可以使用SURF确认检测到的圆圈实际上是轮子并在它们之间进行匹配?我对下一步应该做的事情有点迷茫,任何帮助都会非常感激.
(抱歉英文不好)
UPDATE
这就是我做的.我使用blob跟踪能够在我的照片集中找到斑点.有了这个我有效地可以找到移动卡车.然后我将blob的矩形分成两部分并从那里取下半部分我知道我得到了应该包含轮子的区域,这大大增加了检测.然后我会对我得到的车轮进行轻度强度松动检查.由于它们通常更黑,我应该得到一个相当低的价值,并可以丢弃太白,180/255及以上的任何东西.我也知道我的圆半径不能大于检测区的一半除以一半.

我正在开发一个应用程序,预计将使用opencv删除图像背景,起初我尝试使用抓取,但它太慢,结果并不总是准确,然后我尝试使用阈值,虽然结果还没有关闭th grabcut ,它的速度非常快,看起来更好,所以我的代码首先查看图像色调并分析它的哪一部分显得更多,该部分被视为背景,问题有时会得到前景作为背景如下是我的代码:
private Bitmap backGrndErase()
{
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.skirt);
Log.d(TAG, "bitmap: " + bitmap.getWidth() + "x" + bitmap.getHeight());
bitmap = ResizeImage.getResizedBitmap(bitmap, calculatePercentage(40, bitmap.getWidth()), calculatePercentage(40, bitmap.getHeight()));
Mat frame = new Mat();
Utils.bitmapToMat(bitmap, frame);
Mat hsvImg = new Mat();
List<Mat> hsvPlanes = new ArrayList<>();
Mat thresholdImg = new Mat();
// int thresh_type = Imgproc.THRESH_BINARY_INV;
//if (this.inverse.isSelected())
int thresh_type = Imgproc.THRESH_BINARY;
// threshold the image with the average hue value
hsvImg.create(frame.size(), CvType.CV_8U);
Imgproc.cvtColor(frame, hsvImg, Imgproc.COLOR_BGR2HSV);
Core.split(hsvImg, hsvPlanes);
// get the …Run Code Online (Sandbox Code Playgroud) 我正在尝试基于像素值分离greylevel图像:假设一个bin中的0到60的像素,另一个bin中的60-120,120-180 ......等等到255.范围大致等于此案件.但是,通过使用K-means聚类,可以更准确地衡量我的像素值范围应该是多少?试图获得相似的像素,而不是浪费在存在较低像素浓度的区域.
编辑(包括获得的结果):

k-表示没有簇= 5
对于一个项目我想实现一个颜色聚类算法,它用一个簇的平均颜色替换相似的颜色.
现在,我使用kmeans算法来聚类整个图像.但这需要很长时间.有人知道如何使用kmeans聚类颜色直方图,所以我可以执行这个算法吗?
opencv cluster-analysis data-mining k-means image-segmentation
我在分割下面的车牌图像时面临问题,而对下面的图像进行阈值处理时,字符被分成多于1个字符.所以我得到了错误的OCR结果.我在对图像进行阈值处理后应用了形态学关闭操作,即使在此之后我也无法正确分割字符.



用于分割上面图像的代码如下
#include <iostream>
#include<cv.h>
#include<highgui.h>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
IplImage *img1 = cvLoadImage(argv[1] , 0);
IplImage *img2 = cvCloneImage(img1);
cvNamedWindow("Orig");
cvShowImage("Orig",img1);
cvWaitKey(0);
int wind = img1->height;
if (wind % 2 == 0) wind += 1;
cvAdaptiveThreshold(img1, img1, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C,
CV_THRESH_BINARY_INV, wind);
IplImage* temp = cvCloneImage(img1);
cvNamedWindow("Thre");
cvShowImage("Thre",img1);
cvWaitKey(0);
IplConvKernel* kernal = cvCreateStructuringElementEx(3, 3, 1, 1,
CV_SHAPE_RECT,NULL);
cvMorphologyEx(img1, img1, temp, kernal, CV_MOP_CLOSE, 1);
cvNamedWindow("close");
cvShowImage("close",img1);
cvWaitKey(0);
}
Run Code Online (Sandbox Code Playgroud)
下面给出的输出图像..



任何人都可以提供一种很好的方法来分割这些图像中的字符......
我有一个多色的图像.

我想计算图像的主色.主导颜色是红色,我想过滤掉红色.我在opencv中执行以下代码但它没有执行.
inRange(input_image, Scalar(0, 0, 0), Scalar(0, 0, 255), output);
Run Code Online (Sandbox Code Playgroud)
我怎么能得到主导色呢?我的最终项目应该自己确定对象的最大颜色.这方面最好的方法是什么?
我正在开发我的 python 项目,我需要计算每个乐高积木组件中有多少个孔。我将从输入 .json 文件中获取有关需要计算哪个程序集的信息,如下所示:
"img_001": [
{
"red": "0",
"blue": "2",
"white": "1",
"grey": "1",
"yellow": "1"
},
{
"red": "0",
"blue": "1",
"white": "0",
"grey": "1",
"yellow": "0"
Run Code Online (Sandbox Code Playgroud)
因此,我需要识别必须按颜色计数的组件。然后我必须在特定的砖块组装中确定孔的数量。
这是我使用的图像示例:
我开始将图像更改为 HSV 颜色空间,并使用轨迹栏为每种颜色找到了一个蒙版。通过使用,cv2.inRange我得到了一个掩模,例如红色:
如您所见,反射光没有帮助。此时我不知道我该如何前进。我觉得我应该用来cv2.findContour获取每个组件的轮廓。我认为直方图均衡在这里可能有用。为了检测圆圈我想使用cv2.HoughCircles或者也许cv2.SimpleBloopDetector。但我不知道如何检查每个区域有多少块砖。输出只是特定装配中的一些孔。你能给我一些想法吗?哪个 OpenCv 函数可能适用于此?您将如何解决这种图像处理问题?感谢您的回答。