国产日韩欧美久久久精品图片|国产综合有码无码中文字幕|国产一区二区综合视频|国产亚洲精品电影网站在线观看|国产精品一区在线

機械社區(qū)

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
樓主: awolfbee
打印 上一主題 下一主題

開始設(shè)計一種大蒜播種機

[復制鏈接]
141#
 樓主| 發(fā)表于 2021-1-2 09:20:48 | 只看該作者
#include<iostream>
- r" g+ X8 H! q4 o) ]# `#include<opencv2/core/core.hpp>
* C& z" q5 l! n" y#include<opencv2/highgui/highgui.hpp>
& P9 J" ?3 c" \  w. H/ M#include <opencv2/opencv.hpp>2 {8 V9 F7 Z  ^# _% @
#include <opencv2/imgproc/imgproc.hpp>7 e4 Z" Y. s/ f! k
#include <opencv2/imgproc/types_c.h>
! Z% r7 U8 z$ P! C) s9 H0 c# [#include <stdlib.h>+ b. B+ Z  U* y& N. m
#include <stdio.h>3 W* ^) k! ]2 [; [; G  v3 Q
#include <opencv2/highgui/highgui_c.h>" i; g; Z& Y: f* H: {0 x! T. l5 I
#include <math.h>
$ L* O5 q3 i* o" c$ b//#include "iostream"+ A& r1 J" D2 l9 [$ W
//#include "cv.h"
, g4 y2 c$ ^6 ?: l8 g3 ]1 z) X//#include "highgui.h"
* y: l% p, E& g) d: c//#include "math.h"
) n8 a" {8 _8 \: s9 jusing namespace cv;  //命名空間CV
! V( ]; Q2 n9 T  ausing namespace std;  //命名空間 std
# l0 h* A6 \  h7 @8 Z
4 E# ]: @8 P# b9 `1 ]# Jint threshold_value = 225;  //啟動程序時的閾值初始值,因為227能夠完全提取輪廓,所以設(shè)置為225,實際上227也可以。9 j4 }8 ?7 `3 c; A
int threshold_type = 3;   //啟動程序的時候閾值類型,默認的為不足部分取零1 f' H* C; R5 ]- T9 e/ \* ]
int const max_value = 255;. N' `; R" y+ p
int const max_type = 4;5 |: W0 B) P% ~& J% H0 B; u
int const max_BINARY_value = 255;
5 [& P0 i/ |7 O" \' _; s8 W9 r8 V& a, h) a% B* b
    CvFont font;+ |. B* d# x8 U) f) a) {
    uchar* ptr;
& |: Q1 [5 c. r" u4 J    char label[20];
7 Y0 L" {7 c& R# F    char label2[20];
5 B' H5 Y/ G8 X9 y$ H# j4 [& b+ G1 `
4 z7 a0 p9 Z4 @% U6 o0 w, @Mat src, blured, src_e, src_gray, dst; //類定義幾個圖片變量,dst是最后轉(zhuǎn)化閾值之后的圖片,src.gray是灰度圖) p# {; f# b3 t
                                                //在C語言中“char*”是聲明一個字符類型du的指針,定義數(shù)據(jù)類型,char可以定義字符zhi有變量、數(shù)組、指針。dao
9 ]1 V% {, ]* H! s7 S" q                                                //例如:char *string="I love C#!"
, F: F& j# N# w' N% p' e/ G) [                                                //定義了一個字符指針變量string,用字符串常量"I love C#!",對它進行初始化。對字符指針變量初始化,實際上就是把字符串第1個元素的地址(即存放字符串的字符數(shù)組的首元素地址)賦給string。*/* G. L" v4 V. |, h0 Q& k! i& i
Mat element = getStructuringElement(MORPH_RECT, Size(5,5)); //用于腐蝕的參數(shù)
  P5 {6 r$ H' _" f% F3 ychar* window_name = "閾值演示程序20201121";
0 z1 b# k( b3 ^/ Fchar* trackbar_type = "類型: \n 0: 二值化 \n 1: 反二值化 \n 2: Truncate \n 3: To Zero \n 4: To Zero Inverted";  //
8 b. S/ W/ Z, \6 k. @+ Rchar* trackbar_value = "數(shù)值";& F* ]' b3 d) ]
# m% G' Q# F/ J. l7 L
/// 自定義函數(shù)聲明
% z! D6 _3 {0 B# y4 _# Avoid Threshold_Demo( int, void* );
; a' B" V9 E: p3 F# g# m. y, O
: F7 Z4 L1 p" {7 C. X/**
, y. _* J! ^1 W- T/ N * @主函數(shù); O7 Z4 r0 j2 P! V4 P' g* I+ Y
*/
7 f. @0 y- J# D% Oint main( int argc, char** argv )& P, p8 o* J, ?5 t
{& b" }# S& R/ P7 K5 O4 X
  /// 讀取一副圖片,不改變圖片本身的顏色類型(該讀取方式為DOS運行模式)
) R" V0 }" N, E/ l; w  src = imread("121.JPG", 1); //目前還未使用攝像頭拍攝照片,暫時以直接讀取文件的方式來測試。4 k9 a( ^8 |& x5 S
  erode (src, src_e, element); //對圖片進行腐蝕,參數(shù)可調(diào),正常為9或者10,過大則造成輪廓過小,應該再進行降噪
* A3 C# q. n- [3 J' A  blur (src_e, blured, Size (3,3));//3*3內(nèi)核降噪4 S* Z& P- m7 @5 t3 q
  imshow("腐蝕和降噪后的圖片", blured);  //顯示圖片# ?' l, f% p+ H9 C6 I! m
        int width=blured.rows;  //圖像的行列
' B, n8 {# x. C/ e! R7 ]2 [        int height=blured.cols;  //圖像的列數(shù)量
- |+ c* h* n/ b2 J; X2 ^6 t        cout<<width<<endl;    //顯示行列的具體像素& S4 W+ K( N, W3 E+ c3 }
        cout<<height<<endl;
6 w' k% ~8 J5 t& F5 Y. j        int a[500][1]; //定義整型數(shù)組,后面的1應該可以不要的
6 h& ?- D$ C& \4 a        int b[500];  //設(shè)置一維數(shù)組,用于判斷曲線的切線斜率
$ l, Y+ p& E$ e) U9 `
: y1 {9 q% u/ \. f8 n( i) u  /// 將圖片轉(zhuǎn)換成灰度圖片 Mat img = imread("11.jpg", IMREAD_GRAYSCALE); //在讀取圖片的同時直接轉(zhuǎn)化成灰度圖,              下一步是要將像素亮度超過一定閾值的點提取出來,并找到該點的坐標,然后記錄該點坐標,用于后期的比對
4 X3 k/ B9 q  e  cvtColor( blured, src_gray, CV_RGB2GRAY );
$ m: _; |% D& w( }* w4 r* z! `3 y" D3 G$ T0 C* b
  /// 創(chuàng)建一個窗口顯示圖片; F  _+ b  @, i2 l- z
  namedWindow( window_name, CV_WINDOW_AUTOSIZE );6 w/ W: o7 e$ E6 D0 b

. J2 e$ k7 L1 [% f+ ]: L+ u; a  /// 創(chuàng)建滑動條來控制閾值% w5 _7 U; H4 R* `9 t. `
  createTrackbar( trackbar_type, window_name, &threshold_type, max_type, Threshold_Demo);
5 u& \& x$ ]+ t$ H, ]1 G. _9 U5 c" ^9 T: `# J, N
  createTrackbar( trackbar_value, window_name, &threshold_value, max_value, Threshold_Demo);
; Z% A* w$ W8 p  G+ ~- g6 T0 }" Y5 a$ k, C+ ^) e
  /// 初始化自定義的閾值函數(shù)+ w8 v( b5 W' c, A6 y) _
  Threshold_Demo( 0, 0 );
  J* A) G' t. \3 _
5 {6 B) g9 h! u8 a7 D // Mat img=src;  //暫時無用0 w6 F4 i7 _# z' k
  //imshow("轉(zhuǎn)化之后圖片",dst);
* X( Y9 c+ [4 a. h0 ^; y% t% X4 }" c* j9 C: k" U  N' F  [
                                                          //遍歷圖片的每個像素點,當像素點的閾值大于227時,將最左側(cè)的該像素地址保存在二維數(shù)組中,在該行之后的像素點拋棄,如果閾值低于227,則向下遍歷至該行末,然后從下一行開始對像素進行比較
/ P' x% w& R- A0 K8 A        ; q, j, @1 y0 d) G0 x# L( q
//Mat BW = imread(imgName);
! A2 f  `: A  `& O! y6 T//int value = BW.at<uchar>(191, 51);6 e1 H& \: l" H. l$ b& v
     int width1=dst.rows;  //處理之后圖像的行列
) H# {6 G0 `$ |/ n. r         int height1=dst.cols;  //處理之后圖像的列數(shù)量  z/ b& `- R/ q* Q2 e; Y: C8 I* L% T

0 A7 s* ?: I) ~4 G2 d' R* M3 x        for (int i=0 ; i<height1; i++)  //從第一行開始  應該從最后一行開始向上檢索,這樣可以減少計算量,一旦出現(xiàn)與之前曲線K值相反的方向,則確定是拐點,不用再考慮,但是要考慮出現(xiàn)切線斜率始終是減少的趨勢,這種情況下往往是蒜尖
9 U- V4 B5 K- r        {; ]: K: W4 x# c8 ?, z$ D# Q
                 for (int j = 0; j < width1; j++) //從第一行的第一列開始
6 Y* l6 l4 g# X* f& ?                {! |6 l  I0 g0 E& S
                 //int index = i * width + j;
2 A* d5 o+ Z6 e6 U: i; R3 u                 int value = dst.at<uchar>(i,j); //讀取給定坐標處的像素值! }% M1 A, L" ^' N: l
                //if; //像素值
0 A. \' }& o" @0 Y, ~/ U- H# U6 q                 //int data = (int)dst.data[index];
/ b$ `- N7 P; F9 j! k                                if ( value >200) //如果像素值大于某個數(shù)值,則將其地址記錄在數(shù)組內(nèi),且僅記錄首像素,后面的舍棄( C9 J+ S" o( C% u% x0 q# j1 l* G! Q+ D
                                                        {       
. l. h( u% C- \                                                        a[i][1]=j; //數(shù)組值等于列數(shù),便于后期對比2 i8 M, Z3 d) j8 b& X* J
                                                        //cout<<i<<" --- "<<j<<endl; //i為行數(shù)
, M* u: u/ {0 r' d+ g) I1 g9 T                                                        //cout<<i<<" -坐標-- "<<a[i][1]<<endl;
, e' ~- b+ |3 t( x3 j                                                        if (i>1)9 I" w1 v: g4 r. M
                                                                {  //119 c) u. ?" P! ?1 a( ]
                                                                        if (a[i-1][1]<a[i][1])  //如果第一行中大于某個閾值的像素地址與下一行相比靠右,也就是列數(shù)比上一行要大,則說明該曲線向左側(cè)傾斜,說
9 H" L( s" ?! {9 L) G* `$ F8 S                                                                                                    //明是底部,如果曲線向右側(cè)彎曲,則是蒜尖 (之所以用i-1,是因為總不能和沒有像素的地址對比,所以必須向后取值)
8 L9 i) y- h* J& R! d  T8 Z                                                                        { ! x5 w$ H$ V1 T3 g6 f
                                                                        b[i]=0;             //因此,當下一行的地址比上一行的地址小,則用1表示,如果下一行地址比上一行大,用0表示,1是蒜尾,0是蒜尖。) K  p+ g; Q! I0 ^  E
                                                                        }9 u; n' H/ P7 X6 S8 p
                                                                        else if (a[i-1][1]>=a[i][1])   
6 c7 X8 I& L& f) y. l                                                                        {, L6 B" c7 y4 o  I' P
                                                                        b[i]=1;
0 [* O$ @4 v- p% L6 ?                                                                        }1 G0 ]  \4 }( Q( L' u3 E

* E; T" ?& T$ L* d4 q, ]  h                                                        cout<<i<<" -標識符-- "<<b[i]<<endl;       
2 D& g& t' ~; e" I* I3 \& W                                            //cout<<j<<endl; //j為列數(shù)
( |+ ?3 h* l" n" ]' @) v7 ~$ g                                                                } //11- u) q8 L  N/ ]* p: T4 q
                                                       
6 z) \% e  _% j( ^( O
' n4 `! J% G7 A                         break;  1 F4 d% C, `( M/ n; b) f& X/ G3 b
                                          }
1 G; E  h' H8 ]- ~                                                        }8 l; G; h. X' |# @  r
                 }# K( B3 B5 M; w6 O: l* K* {
        //開始對b數(shù)組進行分析,確定是否為頭尾(但是需要對曲線進行圓滑處理)
3 ]  R+ F" X1 K' m& ?/ Z, o2 V        for (int i=0 ; i<height1; i++)  //對數(shù)組b進行遍歷,檢查是否存在誤判的問題' ]4 q) i# a: c+ S# G' s) K
                                                                        //尋找拐點,找到用于判斷的后段曲線的拐點
4 z" ~$ Q% o/ o) M1 ~                                                                        //對圖形進行圓滑處理,除了最大的拐點之外,盡量不要出現(xiàn)折線
6 q" E$ |- ~9 b3 E0 a        5 @& D- ]5 y! b+ ]2 i- Z# c* y( x
          W$ t& Q* A1 w; o" o0 Y' x; u% {1 V
       
& `  ~, G; U; K5 e; p   // int width=dst.rows;  //圖像的行列2 d, ^. M. c+ Z" Y
        //int height=dst.cols;  //圖像的列數(shù)量& R* [6 J* u6 O9 M" E3 R$ [1 l% w
        cout<<width<<endl;    //顯示行列的具體像素
( s9 K' y  i0 s) k7 G- o% g        cout<<height<<endl;
* I- V( T& ?" K5 D' N7 r( O        //for (int i =height1-5 ; i>20; i--) //對收集的坐標數(shù)據(jù)進行分析: j8 `/ {" }0 W  g
                $ ]! y( X: J* M8 A; V+ d  E
  // 等待用戶按鍵。如果是ESC健則退出等待過程。
2 _9 A5 I% [1 P7 Q; b' d  while (true)' l" M- t) l) U
  {
0 K7 G% c1 b- O& i4 |    int c;( l$ a& @: h+ U1 Q' I% V7 Q
    c = waitKey( 20 );
4 ~7 `% b2 Z1 L, S4 D8 W! _) m9 _    if( (char)c == 27 )" v; [# o* @0 i) A
      { break; }; Y9 e5 {" U* m
   }
9 [  `: i, O- E  O" w
* `, _$ R& S/ x. D}* F- c) k  A3 n6 p' a
% c; V  X0 ?3 a/ w4 A4 t: M
& ^) M) w' Q4 \3 i7 u$ W. v
/**! U. L  A, n* J* C/ S: ^: n
* @自定義的閾值函數(shù). v4 h, O2 c/ W% _. o& {
*/3 e7 C* i3 m+ o6 H; Z
void Threshold_Demo( int, void* )
) {: m" _4 @2 k# y{
  u& M1 W, ^! k0 _  /* 0: 二進制閾值
- _; n4 l$ _3 Y1 c$ F4 n     1: 反二進制閾值9 Z3 w/ {3 W! [4 A6 H; M
     2: 截斷閾值2 W. T) H& R; ]9 A% P
     3: 0閾值7 Q7 m: o: r* K8 d9 o) ^
     4: 反0閾值4 Q9 w/ n: I% A' M4 l, Y6 y
   */
" j- H) \8 J& M; u  z, L6 Q1 W# v2 ~6 M
  threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );# e* s; z, e* \7 T* v: q3 Q0 |; A

; D; q3 A- a/ u8 ?1 y  imshow( window_name, dst );6 M) H9 p- V4 ]# B2 Y' j
}8 c$ t1 y: L1 s5 X1 ]
" p1 `! M- u( ]8 z0 v

5 h5 D$ ]+ D. {5 u" o
) P9 F$ I6 v2 V& j7 I* E! h, T6 w" ]2 v: F9 V( ?' U

3 u. p3 V  [/ X. X! w/*8 a  @. h9 V- V6 L5 {' F1 v/ A* k
void main()* O- g4 g0 W0 P  M
{
! A' M. B6 P5 p% r                / w) h0 v1 c) c. z) `
        //讀入彩色圖像 單通道圖像(CV_8UC1);CV 8位未指定的1通道的圖像,backImg是單通道灰色圖* K6 O* V6 |  Q' x9 I- ~
       
' ~  e0 n! q4 v& j4 ?    //Mat img = imread("fruits.jpg");0 H2 q- C7 V' ~0 D8 y" s' N
        Mat img = imread("11.jpg", IMREAD_GRAYSCALE); //在讀取圖片的同時直接轉(zhuǎn)化成灰度圖,              下一步是要將像素亮度超過一定閾值的點提取出來,并找到該點的坐標,然后記錄該點坐標,用于后期的比對9 x0 B2 _& r1 E3 _
    imshow("灰度圖", img);9 W+ Y% q; y! }7 q$ ^( T3 `7 |
        //確定圖像的尺寸,行列,! R, j; F$ T( j: B
        int width=img.rows;   //圖片的變量名加上行列,就是行列的數(shù)據(jù)
1 B  D: U0 L1 q        int height=img.cols;2 _( o  Y3 O* K6 M) \# B
        cout << width << endl;   //顯示行列的數(shù)據(jù)  本圖片已經(jīng)用358的像素值裁剪了,所以形成的就是高寬都是358
* k0 n! y- I9 ]+ `9 I( w5 k# ]  K        cout << height << endl;
0 V- e- M5 X% O* L4 H: E4 y    //定義一個二維數(shù)組,a[i][1],其行數(shù)等于圖像行數(shù),列數(shù)就一列,用于記錄圖片上像素的亮度超過某個閾值的像素所在的列數(shù),用于下一步的對比。
3 u) E3 y3 S+ B: N! q# q4 s        int a[358][1];   //確定一個358的二維數(shù)組
( D5 H' l, m8 {# R/ V- u7 m$ ~- I' q3 q/ J) G+ Y
//int height = backImg.rows;   //backImg是圖片變量名
# f; B0 [! {! l! w: a/ K, }//int width = backImg.cols;  [  J  Y- y$ Y5 h2 q( T
for (int i = 0; i < height; i++)
' `5 q/ k! w( t  {, `( m5 j, \6 z0 m" h' D2 c
                 for (int j = 0; j < width; j++)- D- @5 q+ R; e
         {
1 g: c, B" F! H2 K% R( T6 G8 R                 int index = i * width + j;% d: y9 t) U, U$ b# {
                //像素值% X: _7 x: F5 v  L0 O  w5 {" V
                 int data = (int)img.data[index];, m0 J7 ~# D; V/ j
         }& T* F- c: K; K/ l" W. k$ L9 s
}" _' h; l  {# m8 v! l
        waitKey();
1 |( F& r0 k" ^  a}
) d8 ^( `2 O6 y$ Q4 [2 v*/
回復 支持 反對

使用道具 舉報

142#
 樓主| 發(fā)表于 2021-1-2 09:23:11 | 只看該作者
以上為使用OPENCV作為視覺識別的工具,目前測試的方式是以一道激光照射在蒜瓣上,根據(jù)激光產(chǎn)生的亮條的形狀以及拐點判斷蒜瓣的頭尾,對于清理非常干凈的蒜瓣來說,這樣識別問題不是很大,基本上還是可以判斷的,但是對于沒有清理干凈的蒜瓣,例如底部還有殘留的塊狀根部,或者是還有蒜皮,這樣就會對識別產(chǎn)生干擾,因此需要使用更復雜的算法排除干擾。
回復 支持 反對

使用道具 舉報

143#
 樓主| 發(fā)表于 2021-1-2 09:24:55 | 只看該作者
目前僅用保存在電腦中的圖片進行測試,暫時還沒有使用攝像頭連續(xù)拍照,關(guān)于如何排序,還得等識別沒有問題之后再說。
; J5 Z  v! M- j
- z1 `% A  J! l" f1 L$ d2 H2 i: b7 `: {
元旦放幾天假,總算有點時間研究下。
回復 支持 反對

使用道具 舉報

144#
發(fā)表于 2021-1-4 13:02:56 | 只看該作者
awolfbee 發(fā)表于 2021-1-2 09:20
: }* X$ l( q4 w2 W4 l8 d. V+ y#include
& J9 n9 j, M; i' K0 c3 P' ^#include
7 J% i) S8 E7 g6 V3 {#include
% m6 a( Q# d+ y; Z' n3 K' [
lzv5,不明覺厲!
' R. S; b* [6 g) p+ r
0 P% ^) X6 U0 X* q這個需要安裝opencv的什么軟件,什么版本,
( g3 v4 B; d1 r/ {, ?/ K& X6 `9 d& {& P! z
才能在C環(huán)境下編譯測試?. c! V7 E/ s% C/ d, y

點評

VS安裝的時候要選中VC,不然白忙一趟,我第一次就是白忙了。  發(fā)表于 2021-2-5 22:52
房事不舉問百度……哈哈……OPENCV實際上就是C語言的函數(shù)庫,只不過是針對視覺識別的,可以到OPENCV官網(wǎng)上下載比較穩(wěn)定的版本,我的是OPENCV3.0+vs2010,之前搞辣椒采摘機的時候就在用,現(xiàn)在在深化。要學習C++語言  發(fā)表于 2021-1-4 19:24
回復 支持 反對

使用道具 舉報

145#
 樓主| 發(fā)表于 2021-1-22 22:26:06 | 只看該作者
, K* O- ?1 j, W" T
8 S/ T% I# V$ _2 K; j1 o
用一次性筷子做了個簡易的相機支架,第一次居然做低了,不能拍攝大蒜的全貌,然后在上面增加了一個小的支架,雙杠上再增加雙杠。7 o4 V3 A" S# [8 \4 o) S
: o5 m# I0 O  U; o6 z) Y% l* |) X' ^

9 j1 F/ _/ c2 k+ a5 b# P7 Q
, `1 c  b; D8 ?拍攝的大蒜圖片,背景色應該為黑色的比較好,還有就是光源沒選擇好,要在支架上再增加LED照明燈,設(shè)置好光源才行。搞視覺,的確麻煩。9 z8 y/ C0 Y4 [- G: G+ F4 \% G, T

* r3 ~: ~# g; J% H* W+ [. d' l+ Q0 c2 G相機的像素選擇有點低,不過28元的攝像頭,還能指望個啥,能拍攝照片就不錯了。# {* d) F7 ~( r2 Z$ ~$ L/ a

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊會員

x

點評

殘存塊根的蒜瓣,從形狀上不好識別,可以從色差上面進行識別。  詳情 回復 發(fā)表于 2021-1-24 11:34
筷子用熱熔膠粘結(jié)的,發(fā)現(xiàn)熱熔膠的確是好啊,隨時隨地粘結(jié),而且強度還不錯。  發(fā)表于 2021-1-22 22:27
回復 支持 反對

使用道具 舉報

146#
 樓主| 發(fā)表于 2021-1-22 22:35:32 | 只看該作者
03年購買了一個飛利浦的剃須刀,用了幾年后電池彈片上銹不能用了,于是就用鋰電池裝上,之前用的是一個巨大的翹板開關(guān),而且是用不干膠帶纏繞的,雖然實用,但是很難看。今天把剃須刀帶到公司去,整理了下,還安裝了一塊鋰電池充電板,焊接完畢后再用熱熔膠固定下相對位置,把電池的觸點用膠保護起來,這樣就比較完美了。充電時是紅色燈,充滿了就轉(zhuǎn)綠色燈。
1 d, w( r; p' C0 O; _實際上我有好幾個剃須刀,但是就這個用的比較順手點,所以就沒舍得丟。到現(xiàn)在已經(jīng)用了18年了,刀片在玻璃板上磨過幾次,依然非常鋒利。
# Z) D4 Y$ q% Y6 ~& [! j& ^2 G+ C  ~7 `+ N

( O3 `* k5 T7 T$ M5 `9 X' ~# H8 ]7 r3 l0 P6 y- C' m
* C& B% W% R! |8 G. q9 n

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊會員

x
回復 支持 反對

使用道具 舉報

147#
發(fā)表于 2021-1-24 11:34:26 | 只看該作者
awolfbee 發(fā)表于 2021-1-22 22:269 g! b, E+ F; e
用一次性筷子做了個簡易的相機支架,第一次居然做低了,不能拍攝大蒜的全貌,然后在上面增加了一個小的 ...
& D5 Z1 `  N! e; P- h
殘存塊根的蒜瓣,從形狀上不好識別,可以從色差上面進行識別。0 c9 c2 w# u" t: E* b/ l' w

( f# v- _' D& N

點評

謝謝提醒,這幾天觀察蒜頭的時候,感覺到可能要使用多種方法同時鑒定,因為正和你說的那樣,殘根影響了外觀,光靠外形搞不定。  發(fā)表于 2021-1-24 19:15
回復 支持 反對

使用道具 舉報

148#
 樓主| 發(fā)表于 2021-1-31 22:09:17 | 只看該作者
用未解鎖的手機屏幕作為背景,效果非常好。調(diào)節(jié)了下焦距,基本上能分辨出外觀來。3 M% j4 Y9 l! d; c# ~; o9 B% f

* w- [0 r  Y) {# Q) o- R先用帶皮蒜瓣,然后剝了幾個蒜瓣,寫了一段程序,現(xiàn)在能夠使用程序讀取照片了。
$ P4 d2 @' }! W; j; o& P% h( T& y5 z7 w  ~( \8 T) z/ _( K
準備搞一個黑色的絨布再加上玻璃板作為背景,然后要粘貼上定位條,這樣每個蒜瓣的原點就確定了,便于后期的程序書寫。, I4 L! X% ^4 q
0 P" `" E1 p+ r% C6 K% ]$ r0 ?

6 ^+ y: `. S6 ^( p
1 q7 `, x0 E. b- }9 I3 {' B3 O$ g& w

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊會員

x
回復 支持 反對

使用道具 舉報

149#
 樓主| 發(fā)表于 2021-1-31 22:11:51 | 只看該作者
感覺按照蒜瓣這樣原始的狀態(tài)識別很麻煩,上周在工作的地方寫程序的時候就在考慮這個不一致性的問題,因為蒜頭碾碎成蒜瓣之后會存在很多蒜皮以及蒜根之類的不規(guī)則物品,對視覺識別會造成很大的干擾,這個可能要設(shè)計個設(shè)備,在把蒜瓣種子送入到鐘子箱之前就要預處理下,把從蒜瓣上剝離的蒜皮清理掉,把蒜根進一步去除,要么就在識別時將無法識別的丟棄到廢料箱中,后期人工再處理。
回復 支持 反對

使用道具 舉報

150#
 樓主| 發(fā)表于 2021-2-2 22:27:15 | 只看該作者
# Q! D! B- m( }: _
通過視覺軟件各種算法,取出蒜瓣的外形圖,現(xiàn)在就是要對這個外形圖進行處理,得出頭尾的結(jié)論。貌似這個也簡單,因為都帶有個小尾巴,但是我把外面的蒜皮剝掉之后是怎樣的呢?下面開始剝皮。
; b+ t* V4 J5 K3 D: C! ?' |; K& g! K
其中的小點應該是灰塵,可以在計算過程中把面積小于多少的點排除,這樣就可以得出蒜瓣的凈輪廓圖像。
: |; G! V' O" Q& h7 n& X

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊會員

x
回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規(guī)則

小黑屋|手機版|Archiver|機械社區(qū) ( 京ICP備10217105號-1,京ICP證050210號,浙公網(wǎng)安備33038202004372號 )

GMT+8, 2025-5-2 10:42 , Processed in 0.065797 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久天天影视香蕉| 国产欧美va欧美va香蕉在| 国产在线一区二区三区四区内谢 | 日本精品无码一区二区三区久久久| 久久国产色av免费看| 日韩精品动漫一区二区| 成人国产三级在线观看| 51国产偷自视频区视频| 377人体粉嫩噜噜噜| 国产国产成年年人免费看片| 亚洲欧美日韩精品久久奇米一区| 久久精品亚洲男人的天堂| 日本字幕一区视频在线| 在线看免费无码av天堂| 无码熟妇人妻av影音先锋| 免费观看又色又爽又黄的| 亚洲色无码专区在线观看精品| 熟女少妇一区二区中文字幕 | 亚洲成年网站一区二区在线| 亚洲一区二区三区无码影院| 国产三区在线成人av| 亚洲夜夜性无码| 四虎亚洲中文字幕无码永久| 超级碰97直线国产免费公开| 国内精品视频一区二区三区八戒| 国产69精品久久久久99尤物| 国产精品多人p群无码| 久久ww精品w免费人成| av官网一区二区| 中文在线无码高潮潮喷在线播放| 国内精品国语自产拍在线观看| 亚州日本乱码一区二区三区| 国产精品18禁污污网站| 丝袜一区综合在线| 成人午夜爽爽爽免费视频 | 欧美日韩视频在线一区二区| 免费高清视频日本一区二区三区| 国内外精品激情刺激在线| 人人狠狠综合久久亚洲爱咲| 国产精品aⅴ免费视频| 国产亚洲精品久久久久天堂软件|