2016-03-28 18 views
9

Nếu tôi có hình ảnh như dưới đây, làm cách nào để thêm đường viền xung quanh hình ảnh sao cho chiều cao và chiều rộng tổng thể của hình ảnh cuối cùng tăng nhưng chiều cao và chiều rộng của hình ảnh gốc hình ảnh vẫn như ở giữa.Làm cách nào để thêm đường viền xung quanh hình ảnh trong python opencv

enter image description here

+2

Làm thế nào về [cv2.copyMakeBorder] (http://docs.opencv.org/2.4/modules/imgproc/ doc/lọc.html # void% 20copyMakeBorder% 28InputArray% 20src,% 20OutputArray% 20dst,% 20int% 20top,% 20int% 20bottom,% 20int% 20left,% 20int% 20right,% 20int% 20borderType,% 20const% 20Scalar &% 20value % 29)? –

Trả lời

9

Đoạn mã sau thêm một biên giới liên tục của kích thước 10 pixels cho tất cả bốn mặt của hình ảnh ban đầu của bạn.

Đối với màu sắc, tôi giả định rằng bạn muốn sử dụng giá trị màu xám trung bình của nền mà tôi đã tính từ giá trị trung bình của hai dòng dưới cùng của hình ảnh của bạn. Xin lỗi, phần cứng được mã hóa, nhưng cho thấy cách thực hiện chung và có thể được điều chỉnh theo nhu cầu của bạn.

Nếu bạn để các giá trị biên giới cho dưới cùng và phải tại 0, bạn thậm chí có được đường biên đối xứng.

Có thể có các giá trị khác cho BORDER_TYPE, chẳng hạn như BORDER_DEFAULT, BORDER_REPLICATE, BORDER_WRAP.

Để biết thêm chi tiết cf: http://docs.opencv.org/trunk/d3/df2/tutorial_py_basic_ops.html#gsc.tab=0

import numpy as np 
import cv2 

im = cv2.imread('image.jpg') 
row, col= im.shape[:2] 
bottom= im[row-2:row, 0:col] 
mean= cv2.mean(bottom)[0] 

bordersize=10 
border=cv2.copyMakeBorder(im, top=bordersize, bottom=bordersize, left=bordersize, right=bordersize, borderType= cv2.BORDER_CONSTANT, value=[mean,mean,mean]) 

cv2.imshow('image',im) 
cv2.imshow('bottom',bottom) 
cv2.imshow('border',border) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 
+0

Sử dụng hướng dẫn tôi nghĩ rằng giá trị cho Màu đỏ (màu xanh có nhãn bị nhầm lẫn) phải là [255, 0, 0]. Nhưng thực ra nó là [1.0, 0, 0] với phao nổi như màu giá trị hình ảnh. – hum3

3

Hãy thử này:

import cv2  

img=cv2.imread("img_src.jpg") 
shape=img.shape 
w=shape[1] 
h=shape[0] 

base_size=h+20,w+20,3 
#make a 3 channel image for base which is slightly larger than target img 
base=np.zeros(base_size,dtype=np.uint8) 
cv2.rectangle(base,(0,0),(w+20,h+20),(255,255,255),30)#really thick white rectangle 
base[10:h+10,10:w+10]=img #this works 
Các vấn đề liên quan