I use the following script to measure the average RGB color of the picture in a selected path. I tried to make 1 dataframe with pd.concat but it doesn’t work out.
def Innovator(ImagePath, SavePath): for file in glob.glob(ImagePath): print(file) img = cv.imread(file) scale_percent = 60 width = int(img.shape[1] * scale_percent / 100) height = int(img.shape[0] * scale_percent / 100) dim = (width, height) imgr = cv.resize(img, dim, interpolation=cv.INTER_AREA) hsv = cv.cvtColor(imgr, cv.COLOR_BGR2HSV) blur0 = cv.medianBlur(hsv, 11) low_yellow = np.array([10, 42, 210]) high_yellow = np.array([30, 255, 255]) mask = cv.inRange(blur0, low_yellow, high_yellow) res = cv.bitwise_and(imgr, imgr, mask=mask) fname = os.path.splitext(os.path.basename(file))[0] # print(fname) Imagefolder = str(SavePath) + '\' + 'Gesegmenteerde afbeelding' if not os.path.exists(Imagefolder): os.makedirs(Imagefolder) cv.imwrite(str(SavePath) + f'/Gesegmenteerde afbeelding/{fname}.jpg', res) result_df = pd.DataFrame() #print(file) x = res[np.all(res != 0, axis=2)].mean(axis=0) x = pd.DataFrame(x) #print(x) x = pd.concat((result_df, pd.DataFrame(x)), axis=0) df_t = x.T df_t = pd.concat((result_df, pd.DataFrame(df_t)), axis=1) df_t.columns = ['R', 'G', 'B'] df_t.loc['Mean'] = df_t.mean() df_t = df_t.round(decimals=1) print(df_t)
This is the result that I get:
But I want just 1 dataframe with one average like this:
R G B 132 206,2 242,5 134,2 208,6 243,6 127,1 208,5 246,2 137,6 205,8 240,5 Mean:
Advertisement
Answer
Use:
def Innovator(ImagePath, SavePath): #create list of DataFrames dfs = [] for file in glob.glob(ImagePath): print(file) ... #for avoid duplicated rows #remove df_t.loc['Mean'] = df_t.mean() print (df_t) #append to list dfs.append(df_t) #outside for loops join together df_big = pd.concat(dfs)