import threadingimport cv2 as cv
import time
import numpy as npclass ROI9527():def __init__(self):passdef draw_Contours(self, contours, img):'''# 绘制自动识别的轮廓  automation 自动识别区域:param contours::param img::return:'''cnt = contours[1:]  # contours 二值图片轮廓    获取全部轮廓Contours_image = cv.drawContours(img, cnt, -1, (0, 0, 255),1)  # 其中参数2就是得到的contours,参数3表示要绘制哪一条轮廓,-1表示绘制所有轮廓,参数4是颜色(B/G/R通道,所以(0,0,255)表示红色),参数5是线宽cv.namedWindow('show Fail', 0)  # O表示显示窗口可以随意手动调节,1cv.imshow("show Fail", Contours_image)  # 显示图片c = cv.waitKey(0)  # 50豪标   显示时间  显示时间越长 卡顿越严重cv.destroyWindow("show Fail")# 显示ROI 有效区域def show_obj_area(self, ROI_list, img):'''自动识别ROI区域显示:param img::return:'''print('ROSlIST: ', ROI_list)print('自动识别ROI区域个数: ', len(ROI_list))new_image = imgfor OBJ_ROI in ROI_list:x_min = OBJ_ROI["x_min"] - 10y_min = OBJ_ROI["y_min"] - 10x_max = OBJ_ROI["x_max"] + 10y_max = OBJ_ROI["y_max"] + 10cv.rectangle(new_image, (x_min, y_min), (x_max, y_max), (4, 211, 41), 2)  # 白色區域  [x列:y列, x列:y行]   # 行差100cv.namedWindow('show_obj_area', 0)  # O表示显示窗口可以随意手动调节,1cv.imshow("show_obj_area", new_image)  # 显示图片c = cv.waitKey(0)  # 50豪标   显示时间  显示时间越长 卡顿越严重cv.destroyAllWindows()def showIMG(self, img, index=9527):'''只用来显示图片:param img::return:'''cv.namedWindow(f'show_img{index}', 0)  # O表示显示窗口可以随意手动调节,1cv.imshow(f'show_img{index}', img)  # 显示图片c = cv.waitKey(0)  # 50豪标   显示时间  显示时间越长 卡顿越严重cv.destroyWindow(f'show_img{index}')def Pictures_of_cutting(self, img):'''图片切割:param img::return:'''img1 = img[350:470, 23:185]  # 截取目标1img2 = img[350:470, 620:780]img3 = img[1370:1490, 23:185]# self.showIMG(img3)return [img1, img2, img3]def readImg(self):img = cv.imread("APP.jpg")img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)  # 图片灰度转换# imgList = self.Pictures_of_cutting(img_gray)  # 图片切割ret, binaryzation_img = cv.threshold(img_gray, 90, 255, cv.THRESH_BINARY_INV)  # 图片二值化# 寻找二值图像的轮廓contours, hierarchy = cv.findContours(binaryzation_img, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)# self.draw_Contours(contours=contours, img=img)  # 画ROI区域obj1 = []  # 目标1ROI_list = []  # 自动识别ROI区域的点存储# ROI 区域处理for i in contours[1:]:  # 0 为最外部边框  所以从index为1开始操作new_np = i.flatten()   # 一维数组a = new_np.reshape(int(len(new_np) / 2), 2)  # 维度转换 二维b = np.argmin(a, axis=0)c = np.argmax(a, axis=0)# 感兴趣区域 画正方形x_min = a[b][0][0]  # ROI 感兴趣区域 正方形X轴 最小值y_min = a[b][1][1]  # ROI 感兴趣区域 正方形y轴 最小值x_max = a[c][0][0]  # ROI 感兴趣区域 正方形X轴 最大值y_max = a[c][1][1]  # ROI 感兴趣区域 正方形y轴 最小值if 200 < y_min < 500 and 0 < x_min < 200:obj1.append([y_min, y_max, x_min, x_max])continuey_minList = []y_maxList = []x_minList = []x_maxList = []for i in obj1:y_minList.append(i[0])y_maxList.append(i[1])x_minList.append(i[2])x_maxList.append(i[3])print(min(y_minList), max(y_maxList), min(x_minList), max(x_maxList))ROI_list.append({"y_min": min(y_minList),"y_max": max(y_maxList),"x_min": min(x_minList),"x_max": max(x_maxList),})# ROI 对象有效区域显示  自动获取ROI区域显示self.show_obj_area(ROI_list, img)exit()former_image_handle = False   # True 原图,  False 为处理二值图片obj_ROI_sum_pixel = 200print('ROSlIST: ', ROI_list)print('自动识别ROI区域个数: ', len(ROI_list))threading.Thread(target=self.show_obj_area, args=(ROI_list,img, )).start()for index, ROI_OBJ in enumerate(ROI_list):if former_image_handle:print("原图处理")ROI2 = img[ROI_OBJ["y_min"]:ROI_OBJ["y_max"], ROI_OBJ["x_min"]:ROI_OBJ["x_max"]]  # 基于原图进行计算判断else:  # 二值图片处理print("二值图处理")print("点的像素坐表: ", ROI_OBJ)# ROI1 = self.binaryzation_img[self.ROI_list[0]["x_min"]:self.ROI_list[0]["x_max"], self.ROI_list[0]["y_min"]:self. ROI_list[0]["y_max"]]ROI1 = img_gray[ROI_OBJ["y_min"]:ROI_OBJ["y_max"],       # 垂直截取长度ROI_OBJ["x_min"]:ROI_OBJ["x_max"]]  # 基于二值化图片进行结果判断   # 横向截取长度# 二值化后图片黑白化  目标黑色  背景白色white_pixel = ROI1[ROI1 == 255]  # 白像素点值 ROI内的像素black_pixel = ROI1[ROI1 == 0]  # 黑像素点print(white_pixel)print(black_pixel)self.showIMG(ROI1, index)continue# 整体判断结果  整体结果PASS 则全pass# if int(len(self.ROI_PASS_LIST)) >= int(self.LED_number):  # 测试对象,  与 需要测试对象长度对比,  必须相等 判为PASS 否则 FAIL#     if not self.PASS_ROI_record:  # 是否有记录  setting ROI 历史记录坐标 无记录 则在第一次测试PASS后初始化保存文档#         self.LED_site_record(self.ROI_PASS_LIST)  # 位置记录  后备之需#     self.LED_test_result = self.if_blue_white()  # 判断当前测试项#     if_not_FAIL = True#     for test_result in self.LED_test_result:#         if self.LED_test_result[test_result] == "PASS":#             pass#         elif self.LED_test_result[test_result] == "FAIL":#             # self.draw_Fail()  # 画无值#             threading.Thread(target=self.draw_Fail).start()#             # multiprocessing.Process(target=self.draw_Fail).start()#             # self.draw_Fail()#             # self.output_result(self.LED_test_result)#             if_not_FAIL = False#             break#     if if_not_FAIL:#         for test_result in self.LED_test_result:#             print("%s=%s" % (test_result, self.LED_test_result[test_result]))#     cv.imwrite(self.save_result_img_path, self.photo_image)# # Fail 后处理# else:#     self.LED_test_result = self.if_blue_white()  # 判断当前测试项#     draw_Fail_List = []#     for Fail_ROI in self.ROI_FAIL_LIST:  # 画值FAIL#         draw_Fail_List.append(#             {"x_min": Fail_ROI["x_min"], "y_min": Fail_ROI["y_min"], "x_max": Fail_ROI["x_max"],#              "y_max": Fail_ROI["y_max"]})#         cv.rectangle(self.photo_image, (Fail_ROI["x_min"], Fail_ROI["y_min"]),#                      (Fail_ROI["x_max"], Fail_ROI["y_max"]), (0, 0, 255), 2)  # 白色區域  [x列:y列, x列:y行]   # 行差100#     if draw_Fail_List:#         self.q_draw_Fail_List.put(draw_Fail_List)#         draw_Fail_List = []#     if self.PASS_ROI_record:  # 有过pass ROI 记录#         # self.draw_Fail()  # 画无值#         threading.Thread(target=self.draw_Fail).start()#         # multiprocessing.Process(target=self.draw_Fail).start()#         # self.draw_Fail()#     self.output_result(self.LED_test_result)# send_str = []# for result in self.LED_test_result:#     send_str.append(str(result) + "=" + str(self.LED_test_result[result]))# send_result = ("\n".join(send_str)).encode("utf8")# self.q_send.put(send_result)  # 结果返回if __name__ == '__main__':ROIobj = ROI9527()ROIobj.readImg()

openCV ROI相关推荐

  1. c++ opencv roi

    最新的: cv::Mat img; a= cv::Mat m0 = img(cv::Rect(i0, i1, w, h)) 以前的: //opencv #include "opencv2/o ...

  2. openCV ROI

    #include "opencv2/core.hpp" #include "opencv2/imgproc.hpp" #include "opencv ...

  3. opencv 边缘平滑_基于OpenCV的车道检测实现(一)

    无人驾驶的话题日趋起热,而车道线检测对于无人驾驶的路径规划来讲特别重要.要遵守交通规则,首先的要求便是对车道线检测,而且通过检测车道线可以进一步的检测地面指示标志.进行前碰撞预警策略设计等. 早早就对 ...

  4. 自学python(2):利用opencv实现读图,显示,画框,裁剪的python代码

    #读图,显示的代码 import cv2 # 读取图像 img = cv2.imread(r'C:/labs/opencvtest/1.jpg', cv2.IMREAD_COLOR) #第一个参数是路 ...

  5. 开个坑,libtorch1.5 + opencv部署

    开个坑,libtorch + opencv部署 libtorch1.5部署windows平台的深度学习应用 libtorch想说production不容易 python opencv 与 c++ op ...

  6. Python+OpenCV 图像处理系列(5)—— 图像 ROI 操作及通道的拆分合并

    1. 图像 ROI 有时你需要对一幅图像的特定区域进行操作.例如我们要检测一副图像中眼睛的位置,我们首先应该在图像中找到脸,再在脸的区域中找眼睛,而不是直接在一幅图像中搜索.这样会提高程序的准确性和性 ...

  7. opencv感兴趣区域ROI的图像混合操作

    AddWeighted( const CvArr* src1, double alpha,const CvArr* src2, double beta,double gamma, CvArr* dst ...

  8. OpenCV(十)ROI感兴趣区域

    目录 1.概念 2.代码 3.效果 参考资料 1.概念 在图像处理的时候,常常我们只想对一部分图像进行处理,也就是感兴趣区域(ROI,region of interest).我们把一部分图像区域分化独 ...

  9. 使用 OpenCV 和 Tesseract 对图像中的感兴趣区域 (ROI) 进行 OCR

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在这篇文章中,我们将使用 OpenCV 在图像的选定区域上应用 O ...

最新文章

  1. redmine 2.2.x 修改文档附件的存放目录
  2. python如何保证输入键入数字
  3. 清除谷歌浏览器的dns缓存
  4. CCF 201712-3 Crontab
  5. 一键刷入twrp_小米/红米手机到手了该怎么解锁和刷 twrp
  6. 阿里云宣布3年再投2000亿
  7. Tips--windows系统下gcc编译C文件为so共享库
  8. torchtext处理文本数据——构造dataset读取文本(学习一)
  9. 常用傅里叶变换公式大全_高二数学常用导数公式大全
  10. apk 泊车摄像头_【实测】 有了这款360全景泊车神器 新司机秒变老司机
  11. 热带鱼水族箱屏幕保护程序
  12. CentOS下IOZone编译安装
  13. struts2拦截器实现登录控制
  14. 数据库课程设计练习- 视图的使用
  15. IC/FPGA系统设计的速度和面积优化
  16. 18年拼多多学霸批算法笔试
  17. 春日游湖不易,但居家聊聊数据湖还是可以的……
  18. 怎么看计算机网络通不通,网络不通应该怎么检查?
  19. [总结]2019年10月 OI学习/刷题记录
  20. java 当年的的第一个月_Java获取当前日期前一周、前一个月、当年的时间、两个日期间的间隔...

热门文章

  1. 机器学习cae_关于CAE 仿真对HPC需求的迷思-Part 1
  2. linux路径跟踪命令,Linux基础命令---tracepath追踪路由信息
  3. ContextMenuStrip 菜单的使用技巧
  4. MySQL批量修改库、表、列的排序规则
  5. rpcs3计算机丢失,【小白必看】关于缺失Vulkan无法打开RPSC3等问题的方案
  6. 基于依存句法分析的实体关系提取
  7. 将IMYWebLoader添加到蚂蚁mpaas框架中引发的问题和解决的问题
  8. mysql插入数据会失败?为什么?
  9. pyqt5 制作壁纸切换工具实例 第二章
  10. iphone个人热点无法开启_iPhone无法开启个人热点怎么回事 iPhone无法开启个人热点解决方法...