天天看點

Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語

導讀

本文主要介紹一個去除紙張中顔色筆迹/墨迹的執行個體,并将Halcon實作轉為OpenCV。

執行個體來源

執行個體來源于51Halcon論壇的讨論貼:

https://www.51halcon.com/forum.php?mod=viewthread&tid=4766

Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語

Halcon實作

參考回帖内容,将代碼整理如下:

read_image (Image, './test.jpg')              get_image_size (Image, Width, Height)              decompose3 (Image, ImageR, ImageG, ImageB)              trans_from_rgb (ImageR, ImageG, ImageB, ImageY, ImageI, ImageQ, 'yiq')              threshold (ImageQ, Regions, 132, 255)              dilation_rectangle1 (Regions, RegionDilation, 25, 15)              inpainting_texture (Image, RegionDilation, InpaintedImage, 5, 20, 0, 'none', 0)
           
Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語
Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語

如上圖所示,可以較好的去除圖中紅色和藍色的筆迹。

OpenCV實作

分析實作方法與思路:

[1] 将原圖從BGR顔色空間轉為YIQ顔色空間;

[2] 分離Q通道圖像對其做二值化處理;

[3] 矩形核做膨脹操作,将筆迹區域連接配接

[4] 将膨脹後的圖像作為mask,傳給inpaint函數,通過圖像修複來去除筆迹。

實作代碼(Python-OpenCV):

#公衆号:OpenCV與Halcon視覺              import cv2              import numpy as np                  img = cv2.imread('test.jpg')              cv2.imshow('src',img)              img_q = np.zeros((img.shape[0],img.shape[1],1),np.float32)              for i in range(0,img.shape[0]):               for j in range(0,img.shape[1]):               B = img[i,j,0]              G = img[i,j,1]              R = img[i,j,2]              img_q[i,j] = 0.214*R - 0.522*G + 0.309*B              cv2.normalize(img_q, img_q, 0, 255, cv2.NORM_MINMAX, -1)              imgQ = cv2.convertScaleAbs(img_q)              cv2.imshow('imgQ',imgQ)                  ret, thresImg= cv2.threshold(imgQ, 165, 255, cv2.THRESH_BINARY)              cv2.imshow('thresh',thresImg)              k1=np.ones((20,30), np.uint8)#指定膨脹核大小              thresImg = cv2.dilate(thresImg, k1, iterations=1)              cv2.imshow('dilation', thresImg)              result = cv2.inpaint(img,thresImg,3,cv2.INPAINT_NS)              cv2.imshow('result', result)              cv2.waitKey(0)              cv2.destroyAllWindows()
           

逐漸效果示範

原圖:src

Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語

Q通道轉8位顯示:imgQ

Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語

二值化效果:thresImg

Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語

膨脹效果:dilation

Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語

inpaint修複效果:result

Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語

結尾語

[1] 提取筆迹的方法有很多種,本文使用的是YIQ顔色空間的Q通道圖像(直接對單個通道門檻值處理較簡單),大家也可以使用其他顔色空間提取紅色和藍色即可(可能需要使用inRange函數在三個通道處理);

[2] RGB顔色空間與YIQ顔色空間的轉換:

① 網上流行的轉換公式:

Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語

② Halcon算子幫助文檔中的轉換公式:

Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語

二者略有差異,本文使用的是Halcon幫助文檔中的轉換方法,直接計算得到Q通道圖像。

完整代碼(Python C++實作)與素材将釋出在知識星球中,有問題可以留言或在星球中提問。

相關文章連接配接:

Halcon缺陷檢測執行個體轉OpenCV實作(一)

Halcon缺陷檢測執行個體轉OpenCV實作(二)

Halcon缺陷檢測執行個體轉OpenCV實作(三)

Halcon缺陷檢測執行個體轉OpenCV實作(四)

Halcon缺陷檢測執行個體轉OpenCV實作(五) 混合顔色藥片缺陷檢測

Halcon缺陷檢測執行個體轉OpenCV實作(六) 瓶口缺陷檢測

Halcon轉OpenCV執行個體--複雜背景下缺陷檢測(附源碼)

更多視覺圖像處理相關内容,請長按關注:OpenCV與Halcon視覺。

Halcon轉OpenCV執行個體--去除紙張中的顔色筆迹/墨迹(附源碼)執行個體來源Halcon實作OpenCV實作逐漸效果示範結尾語