Как я могу применить путь к файлу записи изображения? - PullRequest
0 голосов
/ 16 января 2020
i = 2 #int
cv2.imwrite([r'C:\Users\Desktop\result (' + str(i) + ').png'], result) #result is 16bit image

Я хочу сохранить изображение под именем 'result (2) .png'

Поскольку i застряло в 'для l oop'.

Однако приведенный выше код вызывает ошибку.

Пожалуйста, помогите мне.

add)

## Flat Field Correction (FFC) ##

import numpy as np
import cv2
import matplotlib.pyplot as plt
import numba as nb
import multiprocessing as multi
import parmap
import time
start = time.time()

B = cv2.imread(r'D:\remedi\Exercise\Xray\Offset.png', -1) # offset image

for i in range(2,3):

    org_I = cv2.imread(r'D:\remedi\Exercise\Xray\objects\object (' + str(i) + ').png', -1) # original image

    w = cv2.imread(r'D:\remedi\Exercise\Xray\white\white (' + str(i) + ').png', -1) # white image

    ## dead & bad pixel correction
    corrected_w = w.copy()
    corrected_org_I = org_I.copy()

    c = np.mean(corrected_w)
    p = np.abs(corrected_w - c)

    sens = 0.7
    [num_y, num_x] = np.where((p < c*sens) | (p > c*sens))
    #[num_y, num_x] = np.where((corrected_w < c*0.97) | (corrected_w > c*1.03))

    ar = np.zeros((3,3))
    ar2 = np.zeros((3,3))

    #pool = multi.Pool(processes=6)
    iter = num_y.shape[0]
    for n in range(iter):   
        #parmap.map(bad_pixel_correction, [n, num_y, num_x, ar, ar2, corrected_w, corrected_org_I], pm_pbar=True, pm_processes=6)
        for j in range(-1,2):
            for k in range(-1,2):
                if num_y[n]+j == -1 or num_x[n]+k == -1 or num_y[n]+j == 576 or num_x[n]+k == 576:
                    ar[j+1][k+1] = 0
                    ar2[j+1][k+1] = 0
                else:
                    ar[j+1][k+1] = corrected_w[num_y[n]+j][num_x[n]+k]
                    ar2[j+1][k+1] = corrected_org_I[num_y[n]+j][num_x[n]+k]
        ar[1][1] = 0
        ar2[1][1] = 0
        corrected_w[num_y[n]][num_x[n]] = np.sum(ar)/np.count_nonzero(ar)
        corrected_org_I[num_y[n]][num_x[n]] = np.sum(ar2)/np.count_nonzero(ar2)

    c = np.mean(corrected_w) # constant

    ## flat field correction
    FFC = np.uint16(np.divide(c*(corrected_org_I-B), (corrected_w-B)))

    F = np.fft.fft2(FFC)
    Fshift = np.fft.fftshift(F)
    magnitude_spectrum3 = 20*np.log(np.abs(Fshift))

    [row, col] = org_I.shape
    [row2, col2] = np.array([row, col], dtype=np.int) // 2
    row2_range = 1
    col2_range = 2
    Fshift[:row2-row2_range-1, col2-col2_range-1:col2+col2_range] = 0
    Fshift[row2+row2_range:, col2-col2_range-1:col2+col2_range] = 0
    fishift = np.fft.ifftshift(Fshift)
    result = np.fft.ifft2(fishift)

    print("time :", time.time() - start)

    cv2.imwrite(r'C:\Users\jhjoo\Desktop\corrected_org_I (' + str(i) + ').png', result)
    cv2.imwrite(r'C:\Users\jhjoo\Desktop\corrected_org_I (' + str(i) + ').png', corrected_org_I)
    cv2.imwrite(r'C:\Users\jhjoo\Desktop\corrected_w (' + str(i) + ').png', corrected_w)

1 Ответ

1 голос
/ 16 января 2020

cv2.imwrite принимает первый аргумент как string, а не list. Вы должны исправить свой код следующим образом:

cv2.imwrite(r'C:\Users\Desktop\result (' + str(i) + ').png', result) #result is 16bit image
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...