<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 智能計算 > 專(zhuān)題 > 互聯(lián)網(wǎng)+智慧農業(yè):計算機視覺(jué)技術(shù)在農作物病蟲(chóng)害檢測方面的應用

互聯(lián)網(wǎng)+智慧農業(yè):計算機視覺(jué)技術(shù)在農作物病蟲(chóng)害檢測方面的應用

作者: 時(shí)間:2022-04-21 來(lái)源:CSDN 收藏
編者按:農作物病蟲(chóng)害是我國的主要農業(yè)災害之一,它具有種類(lèi)多、影響大、并時(shí)常暴發(fā)成災的特點(diǎn),其發(fā)生范圍和嚴重程度對我國國民經(jīng)濟、特別是農業(yè)生產(chǎn)常造成重大損失。 隨著(zhù)計算機科學(xué)技術(shù)的飛速發(fā)展,現已有非常多的 AI 方法手段應用于病蟲(chóng)害目標檢測、防治,進(jìn)而運用現代技術(shù)助力贈產(chǎn)脫貧! 本文將從計算機視覺(jué)技術(shù)出發(fā),運用Python語(yǔ)言簡(jiǎn)要分析目標檢測在農作物病蟲(chóng)害方面的研究與應用。

1 項目簡(jiǎn)介

本文引用地址:http://dyxdggzs.com/article/202204/433328.htm

1.1 項目概述

本項目旨在運用Python語(yǔ)言分析和闡述計算機視覺(jué)技術(shù)中的目標檢測在農作物病蟲(chóng)害方面的應用。具體而言,我們將運用Python語(yǔ)言運行并得出目標葉面中已遭受病蟲(chóng)害的面積,然后分析是否需要進(jìn)行農藥噴灑等防治病蟲(chóng)害的進(jìn)一步肆虐,進(jìn)而幫助農名伯伯更好地管理農作物,減少損失、增加產(chǎn)量……

1.2 前期準備

首先,尋找檢測目標:這里我們針對一片部分遭受病蟲(chóng)害的葉片進(jìn)行檢測處理

1650511265257061.png

對葉片分析處理用到python語(yǔ)言及部分第三方庫

在這里:

Python環(huán)境:3.8.2

python編譯器:JetBrains PyCharm 2018.1.2 x64

第三方庫:OpenCV、ilmutils、easygui、numpy、PIL等

2 項目分析

2.1 代碼詳解

導入用到的所有庫

import cv2

import imutils

import easygui

from PIL import Image, ImageDraw, ImageFont

import numpy as np

事先將有病蟲(chóng)害的葉片部分做畫(huà)圖處理(涂成白色) 背景圖

1650511333400882.png

導入圖片并做黑白處理

# foliageNew 作為背景圖,是人為事先在葉子有病蟲(chóng)害的地方用畫(huà)筆涂改為白色的圖片,讀取它

PSpicture = cv2.imread(r"E:foliageNew.png")

# 將圖片 foliageNew 轉換為黑白圖像

PSpicture = cv2.cvtColor(PSpicture, cv2.COLOR_BGR2GRAY)

1650511393500991.png

對背景圖再做高斯處理 

# 對圖片 foliageNew 進(jìn)行高斯處理

PSpictureGS = cv2.GaussianBlur(PSpicture, (21, 21), 0)

1650511459757911.png

同時(shí)事先將目標檢測葉片同樣做畫(huà)圖處理(涂成白色) 

1650511494784905.png

對其做相同處理

# foliageWhite 是葉子目標檢測圖,讀取它

originalPicture = cv2.imread(r"E:foliageWhite.png")

# 將圖片 foliageWhite 轉換為黑白圖像

originalPicture = cv2.cvtColor(originalPicture, cv2.COLOR_BGR2GRAY)

# 對圖片 foliageWhite 進(jìn)行高斯處理

originalPictureGS = cv2.GaussianBlur(originalPicture, (21, 21), 0)

 

1650511537827471.png

1650511545434223.png

對兩張處理后的圖片做差,返回的值代表其差異之處 

# 對圖片 foliageNew 和 foliageWhite 做差(對比),返回的結果代表他們的差異之處

pictureDelta = cv2.absdiff(PSpictureGS, originalPictureGS)

1650511586853831.png

1650517713795775.png

因為之后要用到相關(guān)數據,所以事先查看圖片像素大小

# x, y 是圖片的像素大小

x, y = pictureDelta.shape

print(x, y)

 此值與圖片屬性中所示的值相同,這也正是我們期望的結果

1650517733321360.png

當然,這里我們可以做一下邊緣檢測進(jìn)一步確認我們想要的檢測目標區域

# pictureDelta 是圖像的區域,canny 是圖像的輪廓(白色區域)

img = cv2.GaussianBlur(pictureDelta, (3, 3), 0)

# Canny 邊緣檢測

canny = cv2.Canny(img, 0, 100)

1650517781756910.png

確定目標檢測區域(這里是輪廓區域,不是整個(gè)圖像區域)

即在第二次做高斯處理的那個(gè)圖像上確定檢測區域(像素值為白的區域就是我們想要的目標區域)

# 畫(huà)輪廓,存儲要識別的像素值的位置,記錄在 distinguishLeaf 數組中

for i in range(x):

    for j in range(y):

        if any(originalPicture[i, j] == [255, 255, 255]):  # 顏色為白色的時(shí)候,占位

            distinguishLeaf.append([i, j])


遍歷上述得出的目標區域(已存入數組中,接下來(lái)也就是對數組進(jìn)行操作)

其中LeafArea是目標檢測葉面的面積(多個(gè)像素點(diǎn)的累積值)

       greenLeafArea是目標葉面中綠色部分的面積(多個(gè)像素點(diǎn)的累積值)

因為之前做過(guò)灰度處理(‘img’圖像),故這里只需查看該像素點(diǎn)值是否為黑(即值是否等于0)

1650517827225455.png

很易得出,非黑色部分為葉片綠色部分,因此一旦確定非黑,像素點(diǎn)個(gè)數 +1

for t in distinguishLeaf:

    k, l = t

    LeafArea = LeafArea + 1

    if img[k, l] != 0:

        # print(canny0[k, l])

        greenLeafArea += 1


 至此,成功了一大半,接下來(lái)要做的就是輸出病蟲(chóng)害葉面占的比重值

scale = 100 - (greenLeafArea/LeafArea)*100

percentage = "病蟲(chóng)害葉面占比為:" + str(scale) + ' %'

print(percentage)


當然,我們可以進(jìn)一步體現一下:若病蟲(chóng)害葉面遭受病蟲(chóng)害達到某一值,及時(shí)提醒農名伯伯噴灑農藥進(jìn)行防治。

if scale < 95:

    easygui.msgbox('警告!葉片遭受病蟲(chóng)害!請盡早噴灑農藥!')

 

1650517879972211.png

這里再贅述一點(diǎn),就是可以輸出運行代碼中每一步的圖像處理結果,就像這樣

cv2.imwrite("這里是存入本地圖片地址", 這里是要輸出哪一步圖片的代碼名稱(chēng))

canny0 = cv2.imread("這里是存入本地圖片地址")

cv2.imshow('這里是圖像標題名稱(chēng)', imutils.resize(canny0))


2.2 總觀(guān)代碼

# 導庫

import cv2

import imutils

import easygui

from PIL import Image, ImageDraw, ImageFont

import numpy as np

 

# foliageNew 作為背景圖,是人為事先在葉子有病蟲(chóng)害的地方用畫(huà)筆涂改為白色的圖片,讀取它

PSpicture = cv2.imread(r"E:foliageNew.png")

# 將圖片 foliageNew 轉換為黑白圖像

PSpicture = cv2.cvtColor(PSpicture, cv2.COLOR_BGR2GRAY)

# 對圖片 foliageNew 進(jìn)行高斯處理

PSpictureGS = cv2.GaussianBlur(PSpicture, (21, 21), 0)

# foliageWhite 是葉子目標檢測圖,讀取它

originalPicture = cv2.imread(r"E:foliageWhite.png")

# 將圖片 foliageWhite 轉換為黑白圖像

originalPicture = cv2.cvtColor(originalPicture, cv2.COLOR_BGR2GRAY)

# 對圖片 foliageWhite 進(jìn)行高斯處理

originalPictureGS = cv2.GaussianBlur(originalPicture, (21, 21), 0)

# 對圖片 foliageNew 和 foliageWhite 做差(對比),返回的結果代表他們的差異之處

pictureDelta = cv2.absdiff(PSpictureGS, originalPictureGS)

# x, y 是圖片的像素大小

x, y = pictureDelta.shape

# print(x, y)

 

# pictureDelta 是圖像的區域,canny 是圖像的輪廓(白色區域)

img = cv2.GaussianBlur(pictureDelta, (3, 3), 0)

# Canny 邊緣檢測

canny = cv2.Canny(img, 0, 100)

 

# 定義輪廓(一片葉子)總面積

LeafArea = 0

# 定義綠葉(未被病蟲(chóng)害葉面)的面積

greenLeafArea = 0

# 定義列表,用來(lái)存放要識別的像素點(diǎn)的位置

distinguishLeaf = []

 

# 畫(huà)輪廓,存儲要識別的像素值的位置,記錄在 distinguishLeaf 數組中

for i in range(x):

    for j in range(y):

        if any(originalPicture[i, j] == [255, 255, 255]):  # 顏色為白色的時(shí)候,占位

            distinguishLeaf.append([i, j])

 

canny0 = cv2.add(originalPictureGS, canny)

 

# 判斷葉面顏色

for t in distinguishLeaf:

    k, l = t

    LeafArea = LeafArea + 1

    if img[k, l] != 0:

        # print(canny0[k, l])

        greenLeafArea += 1

 

# 統計綠葉占比

scale = 100 - (greenLeafArea/LeafArea)*100

percentage = "病蟲(chóng)害葉面占比為:" + str(scale) + ' %'

print(percentage)

 

# cv2.imwrite("這里是存入本地圖片地址", 這里是要輸出哪一步圖片的代碼名稱(chēng))

# canny0 = cv2.imread("這里是存入本地圖片地址")

# cv2.imshow('這里是圖像標題名稱(chēng)', imutils.resize(canny0))

 

if scale < 95:

    easygui.msgbox('警告!葉片遭受病蟲(chóng)害!請盡早噴灑農藥!')

 

# 此行代碼用于避免輸出圖片發(fā)生閃退的現象

key = cv2.waitKey(0)


2.3 項目運行結果

1650517961342819.png

1650517966687965.png

3 總結展望

從上述運行結果來(lái)看,該片葉子已經(jīng)被病蟲(chóng)害病害了越葉面面積的17%。此值已超過(guò)最小病害初定值,故最后彈出窗口顯示“警告!葉片遭受病蟲(chóng)害!請盡早噴灑農藥!”

此項目運用簡(jiǎn)單實(shí)例,介紹了計算機視覺(jué)技術(shù)在農業(yè)方面的應用,在幫助農民贈產(chǎn)脫貧方面起到了一定的作用。

這就是“互聯(lián)網(wǎng)+”的實(shí)例項目實(shí)現。


版權聲明:本專(zhuān)欄全部為CSDN博主「IT_change」的原創(chuàng )文章,遵循 CC 4.0 BY-SA 版權協(xié)議。

                  轉載請附上原文出處鏈接及本聲明。

感謝閱讀 ! 感謝支持 !  感謝關(guān)注 !

希望本文能對讀者學(xué)習和理解計算機視覺(jué)技術(shù)有所幫助,并請讀者批評指正!

2020年5月底于山西大同

END

————————————————

版權聲明:本文為CSDN博主「榮仔!最靚的仔!」的原創(chuàng )文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/IT_charge/article/details/106340456



關(guān)鍵詞: 智慧農業(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>