突然发现图片复制不能直接image=source_image,这样image只是source_image的一个”代号“而已,并没有创建一个新的图像,在修改image的元素时同时也会修改了source_image的对应元素。如下面这个例子
import numpy as np
import cv2 as cv
import os
import time
start=time.time()
imgpath="E:\image_data"
imgpath=os.path.join(imgpath,'j3.png')
src_img=cv.imread(imgpath)
rsrc_img=src_img
print("source image",src_img[0][1])
#cv.imshow("sr",src_img)
for i in range(src_img.shape[0]):
for j in range(src_img.shape[1]):
rsrc_img[i][j][1]=0
rsrc_img[i][j][0]=0
end=time.time()
print("run time:",end-start)
cv.imshow("r",rsrc_img)
cv.waitKey(0)
cv.destroyAllWindows()
print("rsrc_img",rsrc_img[0][1])
print("after setting pixl source image",src_img[0][1])
输出结果
source image [255 255 255]
run time: 0.49473094940185547
rsrc_img [ 0 0 255]
after setting pixl source image [ 0 0 255]
改变rsrc_image也就改变了sourc_ image,解决办法就是img=source_img.copy(),这样就创建了一的新的图了。
另外,opecv颜色通道顺序为BGR
如上面程序把图片的0(蓝色)、1(绿色)通道值设为0,只保留了红色通道的数据,图片效果如下
[(33.PNG] 33.PNG
网友评论