awolfbee
发表于 2021-2-2 22:32:31
剥掉蒜皮后的轮廓图。最后一副图样有点奇怪,生成的轮廓曲线连贯且平滑,也就是重新生成了下然后就变成这样了,不知道程序上有哪些变动。
awolfbee
发表于 2021-2-2 22:39:23
程序如下:
操作系统: win7 64位
IDE:VC++2010旗舰版
视觉软件: OPENCV 3.0
//#include "stdafx.h"
#include "core/core.hpp"
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include "highgui.h"
#include <set>
#include <opencv2\opencv.hpp>
#include<vector> //包含所需要的类文件vector,还有一定要加上using namespace std。
#include <stdio.h>
#include <conio.h>
#include <opencv2/highgui/highgui_c.h>
#include <math.h>
#include "iostream"
#include "cv.h"
#include "highgui.h"
using namespace std;
using namespace cv;
//-----------------------------------【main( )函数】--------------------------------------------
// 描述:控制台应用程序的入口函数,我们的程序从这里开始
//-------------------------------------------------------------------------------------------------
int main()
{
int chufa=1;
//【1】从摄像头读入视频
VideoCapture capture(0);
Mat edges; //定义类
namedWindow("预处理后的视频", 0);
// Mat frame;//定义一个Mat变量,用于存储每一帧的图像,将该项至于循环之外,不要重复定义Mat,增快速度;
//定义轮廓和层次结构(这个不是很理解)
//vector<vector<Point>>contours;//其中contours 应该是一个变量,可以用在后面的轮廓查找的函数中,定义点的向量
//vector<Vec4i>hierarchy; //定义四维向量???
//【2】循环显示每一帧
while (1)
{
//读入图像
Mat frame;//定义一个Mat变量,用于存储每一帧的图像,将该项至于循环之外,不要重复定义Mat,增快速度;
if (chufa=1) //当取样信号为1时,开始取当前帧,然后进行识别
{
capture >> frame; //读取当前帧,videocapture函数是不断读取外界的视频,需要一个类来读取当前帧,
chufa=0;
//对于只需要一副图片来进行检测的操作来说,每个循环只要出发某个取样信号,取样一次就好了。因此用IF语句
cvtColor(frame, edges, CV_BGR2GRAY); //灰度化--如果说需要使用颜色检测蒜瓣的底部和头部,可能还需要颜色来判断
threshold(edges, edges, 120, 255, CV_THRESH_BINARY | CV_THRESH_OTSU); //二值化,将其变成黑白两色的图样
blur(edges, edges, Size(3, 3)); //进行模糊,使用3*3内核来降噪
Canny(edges, edges, 0, 30, 3); //进行canny边缘检测并显示
// findContours (edges, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); //要求原图像为8位单通道图像;其中edges是源文件,contours是轮廓函数??
//CV_RETR_EXTERNAL,仅需要外侧的轮廓用于识别,
//CV_CHAIN_APPROX_NONE,获取每个轮廓的每个像素,最好是连续的,
}
imshow("蒜瓣轮廓图", edges); //显示当前帧
if (waitKey(30) >= 0)
break;
}
return 0;
}
awolfbee
发表于 2021-2-5 19:21:52
大白小白 发表于 2020-11-18 13:14
@awolfbee 蒜头压碎成蒜瓣,有视频么?四处纷飞?能不能温柔点?
https://item.taobao.com/item.htm?spm=a230r.1.14.30.2220dd82nuirRU&id=626297555950&ns=1&abbucket=2#detail
这是大蒜分瓣机。
awolfbee
发表于 2021-2-5 19:24:34
大白小白 发表于 2020-11-22 21:23
在图片上注释,没看懂啥意思
带有块状的根部,大蒜剥好之后是没有这个的。
大白小白
发表于 2021-2-5 19:29:10
awolfbee 发表于 2021-2-5 19:24
带有块状的根部,大蒜剥好之后是没有这个的。
老大放假了?
awolfbee
发表于 2021-2-11 00:34:34
今天,哦不, 是昨天开始放假,上午上班的时候看了一个关于单摄像头加线状激光发射器旋转配合OPENCV形成立体图的文章,对激光三维照相有了一点了解。之所以考虑这样的方式,是因为这几天一直在思考如何从大蒜的侧面的形状判断哪边是头或者尾,问题在于误判率太高。所以还是回到检测头和尾的形状特征上来。之前考虑的是接触式的检测方式,当时有考虑用点阵压力传感器测量蒜头和蒜尾的接触压力,如果压力是环形,则是尾(实际上也不一定,因为有根的存在就会误判),如果压力为点状,则为蒜尖。但是从耐久性来考虑,还是非接触式的为好,这样看来,非激光立体照相不可了。
awolfbee
发表于 2021-2-16 23:18:15
http://www.csksoft.net/blog/post/lowcost_3d_laser_ranger_1.html
这是一个激光三维成像的帖子,在其中得到不少启发。
如果能对蒜瓣的头尾进行三维扫描,获得立体的图像,则可以对图像进行分析,确定头尾,这比用基恩士的要划算多了,而且这个扫描面积很小,估计就是10*10个mm。
awolfbee
发表于 2021-2-16 23:19:31
利用废旧光驱上的镜头,在之前的摄像头上增加一个透镜,调节焦距,形成一个小的电子显微镜,这是大蒜的底部照片。
这个嘛,猜猜?
awolfbee
发表于 2021-2-16 23:22:53
老年手机的键盘,B-189,保密手机。
可以非常清晰地看到手指的指纹。
孙启明
发表于 2021-2-18 16:21:16
@awolfbee 试试另一个思路,做光的反射和散射对比,从而判断首尾。