# -*- coding: utf-8 -*-
"""
Created on Tue Sep 19 18:17:55 2023

@author: ym
"""

import cv2
import os
import numpy as np


def tempt_add_adjc():
    
    temp = cv2.imread("img.png")
    
    path = r"D:\DeepLearning\yolov5\runs\trajectory"
    patr = r"D:\DeepLearning\yolov5\tracking\result"
    for filename in os.listdir(path):
        imgpath = os.path.join(path, filename)
        
        img = cv2.imread(imgpath)
        
        img1 = cv2.add(img, temp)
        
        img1path = os.path.join(patr, filename)
        cv2.imwrite(img1path, img1)
        
def temp_add_boarder():
    temp = cv2.imread("cartedge.png")
    temp[640:, 0:20, :] = 255
    temp[640:, -20:, :] = 255
    temp[-20:, :, :] = 255
    
    cv2.imwrite("cartboarder.png", temp)

    
def create_front_temp():
    image = cv2.imread("./iCart4/b.png")
    Height, Width = image.shape[:2]
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    thresh, binary = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY_INV)
    board = cv2.bitwise_not(binary)
    contours, _ = cv2.findContours(board, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
    
    k = 0
    for cnt in contours: 
        img = np.zeros((Height, Width), dtype=np.uint8)
        cv2.drawContours(img, [cnt], -1, 255, 3)
        k += 1
        cv2.imwrite(f"./iCart4/back{k}.png", img)
    
    imgshow = cv2.drawContours(image, contours, -1, (0,255,0), 3)
    cv2.imwrite("./iCart4/board_back_line.png", imgshow)
    
    # cv2.imwrite("./iCart4/4.png", board)
    # cv2.imwrite("1.png", gray)
    # cv2.imwrite("2.png", binary)


    

def create_back_temp():
    '''
    image1.png：从中获取轮廓的初始图像
    image2.png：主要用于显示效果
    Return：img.png
    '''

    image = cv2.imread("image1.png")
    
    Height, Width = image.shape[:2]
    
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
    gray[:405, :] = 0
    thresh, binary = cv2.threshold(gray, 254, 255, cv2.THRESH_BINARY)
    cv2.imwrite("shopcart.png", binary)
    
    imgshow = cv2.cvtColor(binary, cv2.COLOR_GRAY2BGR)
    
    
    
    contours, _ = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
    
    imgshow = cv2.drawContours(imgshow, contours, -1, (0,255,0), 1)
    cv2.imwrite("imgshow.png", imgshow)
    
    
    image2 = cv2.imread("image2.png")
    image2 = cv2.drawContours(image2, contours, -1, (0,255,0), 3)
    
    
    for cnt in contours:
        _, start, _, num = cv2.boundingRect(cnt) 
        
        x1 = (cnt[:, 0, 0] != 0)
        x2 = (cnt[:, 0, 0] != Width-1)
        x3 = (cnt[:, 0, 1] != Height-1)
        x = (x1 & x2) & x3
        idx = np.where(x)
        cntx = cnt[idx, :, :][0]
        
        cnt1 = cntx[:,0,:].copy()
        
        cntx[:, 0, 1] -= 60
        cnt2 = cntx[:,0,:].copy()
        
        
        cv2.drawContours(image2,[cntx], 0, (0,0,255), 2)
        
        
        
    img = np.zeros(gray.shape, np.uint8)
    for i in range(len(cnt1)):
        x1, y1 = cnt1[i]
        x2, y2 = cnt2[i]
        cv2.rectangle(img, (x1-1, y1-1), (x1+1, y1+1), 255, 1)
        cv2.rectangle(img, (x2-1, y2-1), (x2+1, y2+1), 255, 1)
        
        
        
    cv2.imwrite("img.png", img)    
    
    
if __name__ == "__main__":
    # create_back_temp()  
    # temp_add_boarder()
    # tempt_add_adjc()
    
    create_front_temp()
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    