Trả lời cập nhật - 29 tháng 4 năm 2022.
Sau các bình luận lặp đi lặp lại, tôi đã quyết định cập nhật bài đăng này với một hình ảnh tốt hơn.
Xem xét hình ảnh sau:
img = cv2.imread('image_path')Tôi đã thu được một hình ảnh nhị phân sau khi thực hiện ngưỡng nhị phân trên kênh A của hình ảnh được chuyển đổi trong phòng thí nghiệm:
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1]Áp dụng Gaussian Blur:
blur = cv2.GaussianBlur(th,(13,13), 11)Bản đồ nhiệt kết quả:
heatmap_img = cv2.applyColorMap(blur, cv2.COLORMAP_JET)Cuối cùng, chồng chất nhiệt trên hình ảnh gốc:
super_imposed_img = cv2.addWeighted(heatmap_img, 0.5, img, 0.5, 0)Lưu ý: Bạn có thể thay đổi các tham số trọng lượng trong hàm lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 4 và quan sát sự khác biệt. You can vary the weight parameters in the function lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 4 and observe the differences.
Hello,
Tôi vẫn đang học CV2 và cố gắng hiểu làm thế nào để hoàn thành công việc.
Tôi có một bản đồ nhiệt có kích thước (1024, 1024) nằm trong khoảng 0,0 và 1,0. Bản đồ nhiệt thuộc loại 'float64' và có vẻ như thế này
Tôi có một hình ảnh có kích thước (1024, 1024, 3) của loại 'float32'.
Khi tôi tăng cường bản đồ nhiệt trên hình ảnh bằng matplotlib, nó hoạt động tốt.
colormap = 'plasma' fig = plt.figure(figsize=(20,20)) ax2 = plt.subplot(1, 4, 3, aspect='equal') ax2.imshow(np.squeeze(img), alpha = 0.5, cmap='plasma') hm = ax2.imshow(heatmap, alpha = 0.5)Kết quả là:
Làm cách nào để làm điều tương tự bằng CV2?
Tôi đã thử:
output = cv2.addWeighted(heatmap, 0.7, img, 0.3, 0)Nó đã cho tôi lỗi sau:
error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\core\src\arithm.cpp:669: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function 'cv::arithm_op'Để phù hợp với kích thước của bản đồ nhiệt và hình ảnh,
heatmap1 = cv2.cvtColor(heatmap.astype('float32'), cv2.COLOR_GRAY2RGB)Bây giờ, hình dạng là (1024, 1024, 3), nhưng khi tôi vẽ HeatMap1, nó cho thấy
Bất kỳ trợ giúp hoặc đề xuất sẽ giúp ích rất nhiều! Cảm ơn bạn :)
Xin lưu ý rằng tôi muốn giữ hình ảnh và bản đồ nhiệt trong phạm vi [-1, 1] hoặc [0,1] nếu có thể. Chuyển đổi hình ảnh đầu vào thành DTYPE 'UINT16' không thực sự hoạt động tốt. Nó cho thấy hình ảnh với tiếng ồn.
from HeatMap import HeatMap
# input a image path and a numpy array heatmap
hm = HeatMap('demo_image.jpg',heat_map)
# or input a numpy array image and heatmap
hm = HeatMap(image,heat_map,gaussian_std=0) lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
a_component = lab[:,:,1]
th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1]
0Bước 4 - Tạo một trục trong Python ..
Bước 5 - Tạo một mảng để chú thích bản đồ nhiệt ..
Bước 6 - Tạo hình Matplotlib và xác định cốt truyện ..: 3 inputs:
Phương pháp 1 lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
a_component = lab[:,:,1]
th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1]
5: 6 tham số (tất cả tùy chọn) 6 parameters (all optional)
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 1
Phương pháp 2 blur = cv2.GaussianBlur(th,(13,13), 11) 2: 1 Yêu cầu, 8+ tùy chọn* 1 required, 8+ optional*
yêu cầu
- Tên tệp: Tên tệp cho Hình đã lưu (Chuỗi) filename for saved figure (string)
optinal:
- save_path: thư mục lưu (mặc định là thư mục làm việc hiện tại) figure saving directory (default is the current working directory)
- Formate: Hình FOMATE (JPG, JPEG, PNG, PDF, PS, EPS và SVG), mặc định là 'PNG' figure saving fomate (jpg, jpeg, png, pdf, ps, eps and svg), default is 'png'
- Tính minh bạch: Xác định độ trong suốt của lớp phủ HeamAP (thấp hơn -> trong suốt hơn, mặc định là 0,7) define the transparency of heamap overlay (lower -> more transparent, default is 0.7)
- color_map: kiểu bản đồ màu (mặc định là BWR) color map style (default is bwr)
- show_axis: hiển thị trục hay không (Boolean lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 6, mặc định là lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 7) show axis or not (boolean lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 6, default is lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 7)
- show_original: hiển thị hình ảnh gốc (Boolean lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 6, mặc định là lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 7) show original image (boolean lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 6, default is lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 7)
- show_colorbar: hiển thị thanh màu (Boolean lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 6, mặc định là lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 7) show color bar (boolean lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 6, default is lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 7)
- Width_Pad: Đệm chiều rộng (mặc định là 0, được đặt thành giá trị âm để giảm khoảng cách giữa các hình) the width padding (default is 0, set to negative value for reducing the space between figures)
- Phương pháp 2 blur = cv2.GaussianBlur(th,(13,13), 11) 2: 1 Yêu cầu, 8+ tùy chọn*
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 2
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) a_component = lab[:,:,1] th = cv2.threshold(a_component,140,255,cv2.THRESH_BINARY)[1] 3