Welcome to ROSMASTER X3 repository
9.4 Image beautification
4. Open Source CV image beautification
4. Open Source CV image beautification 4.1. OpenCV repair image 4.2. OpenCV image brightness enhancement 4.3. OpenCV image microdermabrasion and whitening
4.1. OpenCV repair image
- Image inpainting is a class of algorithms in computer vision whose goal is to fill areas within an image or video. The area is identified using a binary mask, and filling is usually done according to the area boundary information that needs to be filled. The most common application of image restoration is to restore old scanned photos. It is also used to remove small unwanted objects in images.
- In OpenCV, dst = cv2.inpaint(src, inpaintMask, inpaintRadius, flags) is provided to repair the image,
Parameter meaning:
src: source image, which is the image that needs to be repaired
inpaintMask: Binary mask indicating the pixels to be inpainted.
dst: result image
inpaintRadius: Indicates the radius of the repair
flags : Repair algorithm, mainly INPAINT_NS (Navier-Stokes based method) or INPAINT_TELEA (Fast marching based method)
Navier-Stokes based fixes should be slower and tend to produce more ambiguous results than fast marching methods. In practice, we have not found this to be the case. INPAINT_NS produced better results in our tests and was also slightly faster than INPAINT_TELEA.
- Code and actual effect display
(1) First, we first add damage to the intact picture, which can be understood as modifying the pixel value of a specific part of it
run the program
xpython ~/yahboomcar_ws/src/yahboomcar_astra/scripts/opencv/4_1_1.py
ximport cv2import numpy as npif __name__ == '__main__':img = cv2.imread('yahboom.jpg')for i in range(50,100):img[i,50] = (0,0,0)img[i,50+1] = (0,0,0)img[i,50-1] = (0,0,0)for i in range(100,150):img[150,i] = (0,0,0)img[150,i+1] = (0,0,0)img[150-1,i] = (0,0,0)cv2.imwrite("damaged.jpg",img)dam_img = cv2.imread('damaged.jpg')while True :cv2.imshow("dam_img",dam_img)action = cv2.waitKey(10) & 0xFFif action == ord('q') or action == 113:breakimg.release()cv2.destroyAllWindows()
After running, a picture will be generated, which is regarded as a damaged picture of the original picture.

(2) repair the photo you just created, first read, then create the mask, and finally use the function to repair it
run the program
xxxxxxxxxxpython ~/yahboomcar_ws/src/yahboomcar_astra/scripts/opencv/4_1_2.py
ximport cv2import numpy as npif __name__ == '__main__':dam_img = cv2.imread('damaged.jpg')imgInfo = dam_img.shapeheight = imgInfo[0]width = imgInfo[1]paint = np.zeros((height,width,1),np.uint8)for i in range(50,100):paint[i,50] = 255paint[i,50+1] = 255paint[i,50-1] = 255for i in range(100,150):paint[150,i] = 255paint[150+1,i] = 255paint[150-1,i] = 255dst_img = cv2.inpaint(dam_img,paint,3,cv2.INPAINT_TELEA)while True :cv2.imshow("dam_img",dam_img)cv2.imshow("paint",paint)cv2.imshow("dst",dst_img)action = cv2.waitKey(10) & 0xFFif action == ord('q') or action == 113:breakimg.release()cv2.destroyAllWindows()

As shown in the figure, the left is before repair, the middle is the mask image, and the right is the original image after repair.
4.2. OpenCV image brightness enhancement
- Implementation process: Amplify the three-channel value of each pixel synchronously, while keeping the channel value between 0-255. In fact, it is to traverse each pixel, add and subtract values to them, and then judge the three channels. Whether rgb is in the range of 0-255, if it is greater or less than 255 or 0.
- Code and actual effect display
run the program
xxxxxxxxxxpython ~/yahboomcar_ws/src/yahboomcar_astra/scripts/opencv/4_2.py
ximport cv2import numpy as npif __name__ == '__main__':img = cv2.imread('yahboom.jpg')imgInfo = img.shapeheight = imgInfo[0]width = imgInfo[1]dst = np.zeros((height,width,3),np.uint8)for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]bb = int(b) + 100gg = int(g) + 100rr = int(r) + 100if bb > 255:bb = 255if gg > 255:gg = 255if rr > 255:rr = 255dst[i,j] = (bb,gg,rr)while True :cv2.imshow("dst",dst)action = cv2.waitKey(10) & 0xFFif action == ord('q') or action == 113:breakimg.release()cv2.destroyAllWindows()

The picture on the left is the original picture, and the picture on the back is the photo after increasing the brightness.
4.3. OpenCV image microdermabrasion and whitening
- OpenCV realizes the function of microdermabrasion and whitening of pictures. The principle of implementation is basically the same as the principle of "1.20 OpenCV picture brightness enhancement", but here we do not need to process the r value, just follow this formula, p = p(x)*1.4+ y, where p(x) represents the b channel or g channel, and y represents the value that needs to be increased or decreased. Similarly, after adding the value, we need to judge the value.
- Code and actual effect display
run the program
xxxxxxxxxxpython ~/yahboomcar_ws/src/yahboomcar_astra/scripts/opencv/4_3.py
ximport cv2import numpy as npif __name__ == '__main__':img = cv2.imread('yahboom.jpg')imgInfo = img.shapeheight = imgInfo[0]width = imgInfo[1]dst = np.zeros((height,width,3),np.uint8)for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]bb = int(b*1.4) + 5gg = int(g*1.4) + 5if bb > 255:bb = 255if gg > 255:gg = 255dst[i,j] = (bb,gg,r)while True :cv2.imshow("origin",img)cv2.imshow("dst",dst)action = cv2.waitKey(10) & 0xFFif action == ord('q') or action == 113:breakimg.release()cv2.destroyAllWindows()
