I tried to implement the mcolor colormap in the paper at page 8 to 10.
I developed the code to process a image file and it works ok. Now, I want to adopt this image processing method to the camera which is captured by opencv. I implemented it by python and opencv. It looks like that it's not workable as the computing limitation. Can anyone give me the direction to improve it? I expected to adopt my image processing algorithm to all frames of camera. Thank you. Below is my complete source code of python
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, img = cap.read()
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_new = np.ones([img.shape[0], img.shape[1], 3], np.uint8)
mcolor = np.ones([img.shape[0], img.shape[1], 3], np.uint8)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
val = img_gray[i][j] % 36
if img_gray[i][j] <= 72:
if val >= 1 and val <= 6:
mcolor[i][j] = (0, 0, 35)
elif val >= 7 and val <= 12:
mcolor[i][j] = (i * 10, 0, 0)
elif val >= 13 and val <= 18:
mcolor[i][j] = (1, 0, 35)
elif val >= 19 and val <= 24:
mcolor[i][j] = (i * 20, 0, i * 20)
elif val >= 25 and val <= 30:
mcolor[i][j] = (i * 10, i * 5, i * 5)
elif val >= 31 and val <= 36:
mcolor[i][j] = (i * 10, 0, i * 4)
elif img_gray[i][j] >= 73 and img_gray[i][j] <= 240:
if val >= 1 and val <= 6:
mcolor[i][j] = (0, 0, i * 6)
elif val >= 7 and val <= 12:
mcolor[i][j] = (0, i * 6, i * 6)
elif val >= 13 and val <= 18:
mcolor[i][j] = (0, i * 6, 0)
elif val >= 19 and val <= 24:
mcolor[i][j] = (i * 6, i * 6, 0)
elif val >= 25 and val <= 30:
mcolor[i][j] = (i * 6, 0, i * 6)
elif val >= 31 and val <= 36:
mcolor[i][j] = (i * 6, 0, 0)
elif img_gray[i][j] > 241:
if val >= 1 and val <= 6:
mcolor[i][j] = (0, i * 10, 30)
elif val >= 7 and val <= 12:
mcolor[i][j] = (0, i * 10, 30)
elif val >= 13 and val <= 18:
mcolor[i][j] = (0, i * 10, 30)
elif val >= 19 and val <= 24:
mcolor[i][j] = (i * 10, 0, 0)
elif val >= 25 and val <= 30:
mcolor[i][j] = (i * 10, 0, 0)
elif val >= 31 and val <= 36:
mcolor[i][j] = (i * 10, 0, 0)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
b1, g1, r1 = img[i][j]
r2, g2, b2 = mcolor[i][j]
r, g, b = (
min(round((int(r1) + int(r2) + 1) / 1.2), 255),
min(round((int(g1) + int(g2) + 1) / 1.2), 255),
min(round((int(b1) + int(b2) + 1) / 1.2), 255),
)
img_new[i][j] = (r, g, b)
cv2.imshow("live", img_new)
# cv2.imwrite("img_new.jpeg", img_new)
# cv2.waitKey(0)
if cv2.waitKey(1) == ord("q"):
break
cap.release()
cv2.destroyAllWindows()