当前位置: 首页 > 知识库问答 >
问题:

无人机捕获的太阳能电池板如何裁剪?

裴承安
2023-03-14

我目前正在研究从无人机拍摄的图像(附上样本图像)中裁剪太阳能电池板。我尝试过使用轮廓,但没有适当的结果。它没有检测到图像中的所有太阳能电池板,其中一些太阳能电池板丢失了。我击中了这里。如何进一步操作?请帮我解决这个问题。

谢谢你,

示例代码:

import cv2
import numpy as np
img = cv2.imread('D:\\SolarPanel Images\\solarpanel.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray,(5,5),0)
edges = cv2.Canny(blur,100,200)    
th3 = cv2.adaptiveThreshold(edges,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)

im2, contours, hierarchy = cv2.findContours(th3, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
print("Len of contours",len(contours)
try: hierarchy = hierarchy[0]
except: hierarchy = []

height, width,  = edges.shape
min_x, min_y = width, height
max_x = max_y = 0

# computes the bounding box for the contour, and draws it on the image,
for contour, hier in zip(contours, hierarchy):
    area = cv2.contourArea(contour)

    if area > 10000 and area < 250000:
        (x,y,w,h) = cv2.boundingRect(contour)
        min_x, max_x = min(x, min_x), max(x+w, max_x)
        min_y, max_y = min(y, min_y), max(y+h, max_y)
        if w > 80 and h > 80:
            cv2.rectangle(img, (x,y), (x+w,y+h), (255, 0, 0), 2)

            cv2.imshow('cont imge', img)
            cv2.waitKey(0)

共有1个答案

张昊穹
2023-03-14

要在图像中查找重要对象与背景清晰区分的轮廓,您可以随时尝试将图像转换为HSV格式,然后再将轮廓转换为轮廓。我做了以下工作:

import cv2
import numpy as np
img = cv2.imread('panel.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 
ret,thresh1 = cv2.threshold(hsv[:,:,0],100,255,cv2.THRESH_BINARY)
im2, contours, hierarchy = cv2.findContours(thresh1, cv2.RETR_TREE, 
cv2.CHAIN_APPROX_SIMPLE)
try: hierarchy = hierarchy[0]
except: hierarchy = []
for contour, hier in zip(contours, hierarchy):
    area = cv2.contourArea(contour)
    if area > 10000 and area < 250000:
       rect = cv2.minAreaRect(contour)
       box = cv2.boxPoints(rect)
       box = np.int0(box)
       cv2.drawContours(img,[box],0,(0,0,255),2)
       cv2.imshow('cont imge', img)
       cv2.waitKey(0)
cv2.imwrite("result.jpg",img)
 类似资料:
  • 我正在尝试构建一个应用程序,以获取当前连接的蓝牙耳机的电池电量。此应用程序可以在没有内置此功能的手机上使用 在stackoverflow上搜索时,我发现如何在android中获取蓝牙耳机电池状态这个问题。我使用BluetoothProfile获得了当前连接的蓝牙耳机。耳机情景模式 但是在BluetoothDevice类型的device对象中,我看不到任何获取蓝牙耳机电池电量的方法或属性 我可以获取

  • 需要一些关于Android新捕获SDK的帮助。我在一个活动中使用以下代码。 我在顶级活动中使用正确的appKey和appid。 我想申请电池电量。我该怎么做?我实现了一个侦听器,但不确定如何发出请求。 好的,接下来我有这个要求: 上面的代码执行往返,并调用属性回调,但属性中包含的信息不是百分比。 这是侦听器(从不调用),即使我的类实现了它并订阅了“事物”。 @覆盖公共无效OnBatteryLeve

  • 我一直在使用telegram_bot,并试图获得groupChat id来向groupChat发送通知,但不知道必须使用哪些方法。 当机器人参与聊天时,我使用message.chat.id来获取聊天id,但我必须使用它来获取群聊id,找不到/

  • 我一直在使用Telegram机器人,并试图从组中获取成员列表,但我不知道我必须使用哪些方法。 https://gram.js.org/beta/classes/TelegramClient.html#getParticipants和我找到了这个文件,但不知道如何使用它。

  • 我们遇到了一个JaxB类加载问题,正如JaxB classCastException所强调的那样。 为了解决这个问题,我添加了com。太阳xml。绑定v2。字节码。班级裁缝。noOptimize=true,这实际上解决了这个问题。 然而,我了解到,这将禁用Jaxb直接与字节码交互并通过Java反射API的能力,因此在通过“JAXBContext.newInstance”初始化新的Jaxb上下文时,

  • 当我的WooCommerce购物车页面为空时,我会在页面上出现此错误,我如何消除此错误消息? 致命错误:未捕获的ArgumentCountError:参数太少,无法执行wc_get_page_id(),0在第30行 /home/s3morder/public_html/wp-content/themes/Intranet主题/伍兹商业/购物车/cart-empty.php中传递,而在 /home/