簡體   English   中英

如何使用 OpenCV 在一張 RGB 圖像中編碼灰度、SobelX 和 SobelY?

[英]How to encode Grayscale, SobelX and SobelY in one RGB image using OpenCV?

我有一個 RGB 圖像。 我想將其保存為新圖像,其中GrayscaleSobelX 和 SobelY將保存在新圖像的 R、G 和 B 通道中。 如何在 OpenCV 中做這樣的事情?

換句話說,假設我們有 RBG image ,我們想要創建一個新的 RGB(或 BGR 無關緊要)圖像,該圖像將在其通道中包含灰度值(在 B 中)、sobelX(在 R 中)sobelY(在 G 中)。 主要問題是我們需要以某種方式將 Sobel 量化\標准化為 0-256 值......如何做這樣的事情?

感謝@Rabbid79 最終得到:

%matplotlib inline
from matplotlib import pyplot as plt
import cv2
import numpy as np
!wget "https://helpx.adobe.com/content/dam/help/en/stock/how-to/visual-reverse-image-search/jcr_content/main-pars/image/visual-reverse-image-search-v2_intro.jpg" -O dt.jpg

src = cv2.imread('./dt.jpg', cv2.IMREAD_GRAYSCALE)
def show(im):
  plt.imshow(im)
  plt.show()

show(src)
sobelx = cv2.Sobel(src, cv2.CV_64F, 1, 0)
sobely = cv2.Sobel(src, cv2.CV_64F, 0, 1)

abs_grad_x = cv2.convertScaleAbs(sobelx)
abs_grad_y = cv2.convertScaleAbs(sobely)
grad = cv2.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0)
show(grad)
b = cv2.GaussianBlur(src,(3,3),0)
laplacian = cv2.Laplacian(b,cv2.CV_64F)
l_dst = cv2.convertScaleAbs( laplacian  );
show(l_dst)
dest = np.dstack([src, l_dst, grad]).astype(np.uint8)
show(dest)

將圖像加載為灰度圖像( IMREAD_GRAYSCALE ):

gray = cv2.imread(image_name, cv2.IMREAD_GRAYSCALE)

分別創建一個 sobel-X 和 sobel-Y

sobelx = cv2.convertScaleAbs((cv2.Sobel(gray, cv2.CV_64F, 1, 0)))
sobely = cv2.convertScaleAbs((cv2.Sobel(gray, cv2.CV_64F, 0, 1)))

使用源圖像的大小創建一個空的numpy數組,並將灰度、sobel-X 和 sobel-Y 分配給目標圖像的通道:

dest = np.empty((gray.shape[0], gray.shape[1], 3), np.uint8)
dest[:,:,0] = gray
dest[:,:,1] = sobelx
dest[:,:,2] = sobely

merge圖像:

dest = cv2.merge((gray, sobelx, sobely))

分別使用numpy.dstack

dest = np.dstack([gray, sobelx, sobely]).astype(np.uint8)

全部一起:

gray   = cv2.imread(image_name, cv2.IMREAD_GRAYSCALE)
sobelx = cv2.convertScaleAbs((cv2.Sobel(gray, cv2.CV_64F, 1, 0)))
sobely = cv2.convertScaleAbs((cv2.Sobel(gray, cv2.CV_64F, 0, 1)))
dest   = np.dstack([gray, sobelx, sobely]).astype(np.uint8)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM