Мне не совсем понятно, что именно представляет собой объект temp_img, но если он ведет себя как массивный массив, вы можете заменить ваш цикл на
temp_img[:,:,0] = temp_img[:,:,1]*(coef/100)
temp_img[:,:,1] = temp_img[:,:,2]*(1-coef/1000)
, что должно привести к значительному ускорению, если ваш массивбольшой. Реализация таких операций над массивами оптимизирована очень хорошо, тогда как циклы Python, как правило, довольно медленные.
Редактирование на основе комментариев: поскольку вы работаете с большими изображениями и у вас есть некоторые дорогостоящие операции, которые требуют немасштабируемой версии, но должны выполняться только один раз, ваш код может получить следующую структуру
import... #do all your imports
def expensive_operations(image, *args, **kwargs):
#do all your expensive operations like object detection
def scale_image(image, scale):
#create a scaled version of image
def cheap_operations(scaled_image, windowName):
#perform cheap operations, e.g.
coef = cv2.getTrackbarPos("coef", windowName)
temp_img = np.copy(scaled_image)
temp_img[:,:,1] = temp_img[:,:,1]* (coef / 100)
temp_img[:,:,2] = temp_img[:,:,2] * (1 - (coef / 100))
cv2.imshow(windowName, temp_img)
input = cv2.imread(path)
windowName = "Image"
cv2.namedWindow(windowName)
cv2.createTrackbar("coef", windowName, 0, 25000, nothing)
condition = True
expensive_results = expensive_operations(input) #possibly with some more args and keyword args
scaled_image = scale_image(input)
while condition:
cheap_operations(scaled_image, windowName)
if cv2.waitKey(30) >= 0:
condition = False
cv2.destroyAllWindows()