日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

LINUX下简单实现ISP图像处理从RAW到RGB,BMP算法、RGB到JPEG库的使用(一)

發布時間:2024/3/13 linux 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LINUX下简单实现ISP图像处理从RAW到RGB,BMP算法、RGB到JPEG库的使用(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?

????????在這里分享一下相關的ISP的一些基本簡單圖像處理算法。在一般的市面上,相關的ISP算法都是非常復雜,且經過不同serson設備的情況進行固定參數并且固化在芯片內來實現。所以硬件ISP的效率會比軟件算法實現的ISP要高,而且后續開發者所要做的事情比較少。但是缺點就是實現邏輯復雜,而且不同設備并不是完全通用。下面,由我來分享一下最近的干貨。

? ? ? ? 這里實現的是ISP的功能是對圖像的處理,以及像素的變化,一般攝像頭都是自帶硬件ISP,所以你拿到的圖片都是經過處理過的。這里是范例講解ISP內部一些簡單的算法實現!在LINUX上對圖片直接變換。分享一些最簡單的方法幫助大家理解處理的流程,有一些處理比較復雜,所以樓主打算下一篇文章再次補上,點名白平衡要跨域處理。

ISP 處理流程:

Bayer、黑電平補償 (black level compensation)、鏡頭矯正(lens shading correction)、壞像素矯正(bad pixel correction)、顏色插值 (demosaic)、Bayer 噪聲去除、 白平衡(AWB) 矯正、 色彩矯正(color correction)、gamma 矯正、色彩空間轉換(RGB 轉換為 YUV)、在YUV 色彩空間上彩噪去除與邊緣加強、色彩與對比度加強,中間還要進行自動曝光控制等, 然后輸出 YUV(或者RGB) 格式的數據, 再通過 I/O 接口傳輸到 CPU 中處理。

? ? ? ? 首先我們要了解一些圖片的格式:

  • JPEG(Joint Photographic Experts Group):一種有損壓縮格式,適合存儲照片和圖像,能夠在壓縮圖像的同時保持較高的圖像質量,但不適合存儲帶有透明背景的圖像。
  • PNG(Portable Network Graphics):一種無損壓縮格式,適合存儲帶有透明背景的圖像,支持高分辨率和透明度控制,但文件較大。
  • GIF(Graphics Interchange Format):一種支持動畫的無損壓縮格式,適合存儲簡單的動畫和圖形,但顏色數較少,不適合存儲復雜的圖像。
  • BMP(Bitmap):一種無壓縮格式,適合存儲簡單的圖形和圖像,但文件較大,不適合存儲大量的圖像。
  • Raw RGB: Raw RGB是一種基于原始紅、綠、藍(RGB)值的圖像格式,每個像素都由三個顏色通道組成。Raw RGB通常以二進制格式存儲,每個像素占用3個或4個字節的存儲空間。由于它不進行任何壓縮,因此通常需要更多的存儲空間,并且需要更大的帶寬來傳輸圖像數據。
  • YUYV: YUYV是一種基于亮度(Y)和色度(U、V)的圖像格式,每個像素由兩個亮度樣本和一個色度樣本組成。它是一種有損壓縮格式,通常以二進制格式存儲,每個像素占用2個或4個字節的存儲空間。由于它能夠更有效地壓縮圖像數據,因此在視頻采集和傳輸中常常使用。
  • YCrCb: YCrCb是一種基于亮度(Y)和色度(Cr、Cb)的圖像格式,每個像素由一個亮度樣本和兩個色度樣本組成。它是一種無損或有損壓縮格式,通常以二進制格式存儲,每個像素占用2至4個字節的存儲空間。由于它能夠更有效地壓縮圖像數據,并且支持高質量圖像和視頻的編碼和解碼,因此在數字圖像和視頻處理中廣泛使用。
  • Raw: Raw是一種未經壓縮或有損壓縮的圖像格式,通常包含從圖像傳感器捕獲的原始像素數據。在Raw格式中,每個像素都由一個亮度值或顏色值組成,并且沒有進行圖像處理或顏色校正。Raw格式通常由相機或其他數字圖像設備使用,以便用戶可以使用專業軟件進行后期處理和編輯。由于Raw格式保留了原始圖像的所有信息,因此它通常需要更多的存儲空間和更長的傳輸時間。但是,Raw格式也提供了更大的靈活性和更高的圖像質量,因為它允許用戶在后期處理中進行更多的編輯和調整。Raw格式的常見擴展名包括.CR2、.NEF、.ARW等。
  • ? ? ? ? 這篇博客主要處理RAW到RGB888的一些步驟,上面介紹的圖像格式中常見的PNG,JPG(JPEG)圖像格式是進行壓縮編碼過后的圖片,PNG一般能壓縮到原像素大小圖片的一半左右,還多出了透明度。JPG格式甚至能壓縮到原圖的百分之二三十。BMP是沒有被壓縮的圖片,不過他經過了色域轉換。RAW格式就是一張灰階圖,它沒經過色彩空間的變換,只是一張每個像素記錄灰度值的圖片。一般有RAW10,RAW8,RAW12,也就是每個像素兩個字節,里面高位或者低位的前后10,8,12個位是有效位。

    ? ? ? ? 過程一般是RAW轉化為RGB再轉化為BMP,或者RGB再次轉化為YUV格式(這種格式方便傳輸)。也可以由RGB轉化為YCrCb后再變化為JPEG(過程復雜),或者RGB數據解碼為像素數據,再變為PNG。

    ? ? ? ? 在寫代碼之前我們要弄懂什么叫RAW的顏色和灰階(灰度)。在RAW圖中每個像素實際上都是代表了一種顏色。一般情況下主要有這四種分布情況,這是我們直接拿出四個格子的像素顏色作為參考(例如第一種我們把他叫做GRBG格式的bayer圖),以此類推。每個我們看見的BMP彩色照片每個像素都是由三種顏色RGB組成的,但是bayer圖每個像素只有一種顏色,所以放大來看就是和下面的圖一樣,但是如果一個像素包含三種顏色RGB為例,那他就不是單純的紅、綠、藍,而是三種顏色的混色。RAW格式是沒有混色的格式圖片,它每個像素只有一種顏色。每個顏色的值代表著這個顏色的深淺度。

    ? ? ? ? 寫代碼前一定要注意!!!溢出!!溢出!!對于十六位加法要很多像素相加的最好用六十四位作為total值!出現什么問題先排除是不是溢出問題!!!還有就是計算無符號數是沒有小數的,比如說陰影矯正如果沒有小數,就會出現每一圈亮度波紋的沒有過度(因為都是整數倍從1直接跳到2,缺少了1和2之間的倍數圖像就會變化的很突兀)看起來亮度就是一圈一圈的。解決這種方法最好就是變大十倍乃至一百倍相乘運算后再次除以十倍乃至一百倍,這樣就能解決無符號數不能計算小數的問題!!!


    讀取一張RAW格式圖片:

    ? ? ? ? 這里不詳細說明其他,只說明對RAW到RGB,RGB到BMP,以及RGB使用libjpeg轉化為jpg格式的過程。這里樓主用的是一張5600*5600像素的低十位有效的RAW圖。記得注意你當前環境的大小端,低位是前十位還是后十位,如果和我不一樣得要把大小端顛倒過來計算。這里提供一個轉換函數:

    // 大小端轉換,寫成內聯函數效率高 inline uint16_t swap_endian(uint16_t num) {return (num >> 8) | (num << 8); }

    ? ? ? ? 首先第一步,再Linux下我們要對RAW文件進行讀取。(這里讀取后我直接把他轉成BMP查看是否正確)。以下是讀取代碼:

    vector<vector<uint16_t>> read_raw(const char *filename, int rows, int cols) {vector<vector<uint16_t>> image(rows, vector<uint16_t>(cols));FILE *fp;uint16_t buffer[1];int i, j;fp = fopen(filename, "rb");if (fp == NULL){perror("Error opening file");exit(1);}for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){ if (fread(buffer, sizeof(uint16_t), 1, fp) != 1){printf("Error reading file: row %d, col %d\n", i, j);exit(1);}image[i][j] = buffer[0];}}fclose(fp);return image; }

    ? ? ? ? 兩個字節兩個字節大小的讀取,把讀到的數據放到一個5600*5600的二維向量中。這里用向量有個好處,就是可以忽略數組的越界問題。雖然上面的讀取簡單,但是響應速度比較慢讀一次五六秒,對于一個圖像處理芯片來說肯定是越快越好,所以我對其進行了優化,采用的多線程讀取。下面是多線程讀取raw格式文件部分主要的代碼,這是所有線程都要用到的結構體:

    #define THREAD_NUM 24 // 定義線程數 #define PIXEL_SIZE 2 // 定義每個像素占用的字節數為2字節// 線程傳遞消息結構體 struct ThreadArg {int start_row; // 線程處理的起始行號int end_row; // 線程處理的結束行號int image_width; // 圖像的寬度int image_height; // 圖像高度const char *filename; // 文件名vector<vector<uint16_t>> *image_data; // 傳入的圖像數組vector<vector<Pixel>> *rgb_data; // 傳入的圖像數組uint16_t min_p; // 最小值參數// ThreadArg() = default; // 默認構造函數 };

    ? ? ? ? 然后就是線程讀取函數,和線程函數的代碼:

    void *read_image(void *arg) {ThreadArg *thread_arg = (ThreadArg *)arg; // 將傳遞給該線程的參數強制轉換為 ThreadArg 指針int start_row = thread_arg->start_row; // 獲取該線程需要處理的起始行號和結束行號int end_row = thread_arg->end_row;int image_width = thread_arg->image_width; // 獲取圖像的寬度、文件路徑以及二維矢量的指針const char *filename = thread_arg->filename;vector<vector<uint16_t>> *image_data = thread_arg->image_data;FILE *fp = fopen(filename, "rb");if (fp == NULL){cerr << "Failed to open file " << filename << endl;pthread_exit(NULL);}fseek(fp, start_row * image_width * PIXEL_SIZE, SEEK_SET); // 將文件指針定位到該線程需要處理的起始位置for (int i = start_row; i < end_row; i++) // 循環讀取該線程需要處理的所有行{vector<uint16_t> row_data(image_width); // 創建一個臨時的一維矢量,用于存儲當前行的數據fread(row_data.data(), PIXEL_SIZE, image_width, fp);(*image_data)[i] = row_data;}fclose(fp);pthread_exit(NULL); }vector<vector<uint16_t>> thread_read_raw(const char *filename, int image_width, int image_height) {vector<vector<uint16_t>> *image_data = new vector<vector<uint16_t>>(image_height, vector<uint16_t>(image_width));pthread_t threads[THREAD_NUM]; // 創建多個線程,每個線程讀取圖像的一部分ThreadArg *thread_args = new ThreadArg[THREAD_NUM];int rows_per_thread = image_height / THREAD_NUM;int i;for (i = 0; i < THREAD_NUM - 1; i++) // 計算該線程需要處理的起始行號和結束行號{thread_args[i].start_row = i * rows_per_thread;thread_args[i].end_row = thread_args[i].start_row + rows_per_thread;thread_args[i].filename = filename;thread_args[i].image_data = image_data;thread_args[i].image_width = image_width;pthread_create(&threads[i], NULL, read_image, (void *)&thread_args[i]); // 創建線程并啟動}// 處理最后一個線程需要處理的行數可能不足 rows_per_thread 的情況thread_args[i].start_row = i * rows_per_thread;thread_args[i].end_row = image_height;thread_args[i].filename = filename;thread_args[i].image_data = image_data;thread_args[i].image_width = image_width;pthread_create(&threads[i], NULL, read_image, (void *)&thread_args[i]); // 創建線程并啟動for (i = 0; i < THREAD_NUM; i++) // 等待所有線程執行完畢{pthread_join(threads[i], NULL);}vector<vector<uint16_t>> result(*image_data); // 將指針指向的二維矢量復制到一個新的二維矢量中delete image_data;delete[] thread_args;return result; }

    ? ? ? ?這是讀取到的一張圖片:

    ? ?

    ? ? ? ? ? ? ? ? ? ? ? ? ? ??RAW格式原圖? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ?RAW格式放大? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    ? ? ? ? 放大后清晰的看見一張RAW格式的圖是由紅綠藍三色組成。


    壞點矯正:

    ? ? ? ??壞點是指在數字圖像中出現的一些不正常的像素點,它們可能是傳感器損壞、傳輸過程中出現的錯誤或其他原因引起的。壞點的存在會影響圖像的質量和準確性,因此需要進行壞點處理。比如說serson上某個感光傳感器損壞,導致拍出的那一個點的像素缺失。

    ? ? ? ? 樓主本人對壞點處理的方法是判斷每個像素是否低于相鄰像素的平均值0x80(這個值是看自己設置)可以調成自己合適的參數。

    uint16_t seek_bad_Pixel(vector<vector<uint16_t>> &image) {int width = image.size(), height = image[0].size(), m = 0, n = 0;uint16_t min_pixel = image[0][0];// 尋找壞點for (int i = 0; i < width; i++){for (int j = 0; j < height; j++){// 判斷壞點if (abs((correct_bad_Pixel(image, i, j) - image[i][j])) > 0x80){image[i][j] = correct_bad_Pixel(image, i, j);}if (image[i][j] < min_pixel){min_pixel = image[i][j];}}}return min_pixel; }uint16_t correct_bad_Pixel(vector<vector<uint16_t>> &image, int bad_pixel_x, int bad_pixel_y) {int width = image.size(), height = image[0].size(), count = 0;uint16_t sum = 0, direction_avaerage = 0, direction_up = 0, direction_dowm = 0, direction_right = 0, direction_left = 0; // 周圍元素的總和if (bad_pixel_x < 0 || bad_pixel_x >= width || bad_pixel_y < 0 || bad_pixel_y >= height){return -1;}if (bad_pixel_x - 2 >= 0){direction_up = image[bad_pixel_x - 2][bad_pixel_y];count++;}if (bad_pixel_x + 2 < width){direction_dowm = image[bad_pixel_x + 2][bad_pixel_y];count++;}if (bad_pixel_y - 2 >= 0){direction_right = image[bad_pixel_x][bad_pixel_y - 2];count++;}if (bad_pixel_y + 2 < height){direction_left = image[bad_pixel_x][bad_pixel_y + 2];count++;}sum = direction_up + direction_dowm + direction_right + direction_left;direction_avaerage = sum / count;return direction_avaerage; }

    ? ? ? ? 由于我拿到的RAW圖在sensor出來的時候已經進行過壞點矯正了,所以和原圖沒什么區別(serson一般自帶了ISP)。這是網上搜到的其他矯正方法,感興趣的也可以自己去嘗試以下。

  • 壞點修復:通過對壞點周圍的像素進行插值或其他算法處理,將壞點處的像素值估計出來,以達到修復的效果。
  • 壞點剔除:將壞點從圖像中剔除,即將其像素值置為背景值或其他合適的值。這種方法適用于壞點數量較少且分布較散的情況。
  • 壞點替換:將壞點處的像素值替換為周圍像素的平均值或其他合適的值。這種方法適用于壞點數量較多且分布較集中的情況。
  • 壞點標記:將壞點在圖像中標記出來,以便后續的處理或分析。這種方法適用于需要保留原始圖像信息的情況。
  • 壞點檢測:通過對圖像中的像素值進行統計分析,檢測出可能存在的壞點。這種方法適用于大規模圖像處理和自動化處理的情況。 總之,壞點處理方法的選擇應根據具體情況進行,以達到最佳的處理效果。

  • 黑電平矯正:

    ????????由于圖像傳感器中各個像素元件之間的差異,以及電路噪聲等因素,黑電平的基準值可能存在一定的偏移。如果不對黑電平進行校正,圖像中的黑色部分可能會出現灰色或者色偏等不正常的顯示情況。簡單來說是個什么情況呢?就是像素傳感器在完全不感光的情況下,會出現暗電流(漏電)現象,導致在純黑環境,搜集到的像素值也不為0。所以拍出來的照片都是在那不為零的基礎上疊加的,發生了偏移。所以我們要減去這一部分的系數,來讓照片恢復正常。通常,這種暗電流的情況和相機自身的溫度也是由非線性的關系。而且要拿到該相機拍的一張純黑的圖作為參照來處理。但是樓主這里沒有相關的圖像和參數,根據大佬的指導,可以用本相片中最暗的一個像素值作為基準,然后讓整一張圖片偏移這個值。

    暗電流是指在相機或圖像傳感器沒有受到光照的情況下,由于材料內部自由電子的熱運動而產生的電流。溫度是影響暗電流的重要因素之一,兩者之間存在一定的關系。 一般來說,溫度越高,暗電流就越大。這是因為在高溫下,材料內部的自由電子熱運動加劇,導致更多的電子穿過PN結并流入電路中。此外,隨著溫度的升高,PN結的導電性能也會發生變化,從而進一步影響暗電流的大小。 因此,在進行高精度的圖像采集和處理時,需要對暗電流進行校準和補償,以減少其對圖像質量的影響。同時,也需要注意相機或圖像傳感器的工作環境和溫度控制,以保證暗電流的穩定性和可控性。

    ? ? ? ? 以下是這個簡單的范例函數:

    int Black_Level_Correction(vector<vector<uint16_t>> &image) {int width = image.size(), heigth = image[0].size(), i, j;uint16_t min_pixel = image[0][0];// 第一遍遍歷整個數組找到最小的像素值作為黑電平的補償數for (i = 0; i < width; i++){for (j = 0; j < heigth; j++){if (image[i][j] < min_pixel){min_pixel = image[i][j];}}}// 第二遍遍歷數組用黑電平補償數對圖片每個像素進行補償for (i = 0; i < width; i++){for (j = 0; j < heigth; j++){image[i][j] -= min_pixel;}}return min_pixel; }


    陰影矯正:

    ????????陰影矯正是數字圖像處理中的一項技術,用于去除圖像中的陰影效果,以提高圖像的質量和準確性。陰影效果是指由于光線的遮擋、衰減或反射等原因,在圖像中出現的較暗的區域。陰影效果會影響圖像的亮度、對比度和色彩平衡,降低圖像的可讀性和識別性。因此,陰影矯正成為數字圖像處理中的一項重要技術。 陰影矯正的原理是基于圖像中的光照模型,即光線從光源到物體表面的反射和衰減過程。光線經過物體表面反射后,會遵循一定的光照規律分布到物體表面的不同部位,形成明暗不同的區域。在陰影區域中,光線受到遮擋或衰減,導致反射光強度變弱,因此需要對陰影區域進行矯正。

    ?網格法

    ????????鏡頭陰影的漸變曲率從中心到邊緣逐漸增大,增益曲線表現為中心疏,邊緣密。因此將圖像劃分成中間疏、四周密的網格,每個塊內有不同的增益。位于每個塊內的像素點認為具有相同的增益值有相同的增益。網格法如下圖所示,該方法能適應不同的鏡頭模組,陰影校正效果較好。

    同心圓法

    ????????鏡頭陰影從圖像中心到四周越來越嚴重,且基本是呈現中心對稱的,根據鏡頭陰影的這個特點,提出了一種鏡頭陰影校正方法,即根據各像素點與圖像中心的距離R計算出一個校正系數。如下圖所示,該方法簡單、復雜度低、占用內存少,但是鏡頭裝配過程復雜,不存在這種完全對稱的情況,因此,該方法鏡頭陰影校正的效果一般欠佳,不具有實際應用價值。

    ? ? ? ? 同心圓算式增益可以自己安排但是要注意合理性,增益和R(距離)的關系一定是乘法,而不是加法,因為如果是本來是黑色距離再遠,它也是黑色,如果你把本來是純黑的點變成了其他顏色那就錯了,我們增益的是非黑色的點。最后,要注意溢出和小數倍的存在。

    ? ? ? ?為了讓初學者能有簡單理解,這里采用的是第二種方法。以下是范例代碼:

    void Shadow_Correction(vector<vector<uint16_t>> &image, double compensation) {int width = image.size(), heigth = image[0].size(), arv_x = 0, arv_y = 0, i, j, count = 0, count_1 = 0;float R = 0.0;arv_x = (int)width / 2;arv_y = (int)heigth / 2;for (i = 0; i < width; i++){for (j = 0; j < heigth; j++){// 計算距離R = (float)abs(sqrt(pow(arv_x - i, 2) + pow(arv_y - j, 2)));if (R > 2800){R = 0;}//如何矯正的值這里是自己決定的公式也是可以自己設定,甚至可以非線性,具體要看你照片的效果// image[i][j] = (double)pow((1.0+(R/280)/10),3)*image[i][j];image[i][j] = (float)((float)10 + (float)(R / compensation)) * image[i][j];image[i][j] = image[i][j] / 10;if (image[i][j] > 0x3ff){image[i][j] = 0x3ff; // 防止曝光過度}}} }

    ? ? ? ? ?陰影矯正對比圖片:

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?處理前? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??處理后

    ? ? ? ??注意:為了大家更直觀的看清楚我這給大家看的是RGB插值后的BMP圖片的效果!

    ???????? 可以看出處理后,鏡頭附近的陰影消失了很多,整個鏡頭也顏色鮮艷了,具體要多少參數自己調整。但是使用圓心法的缺陷也暴露出來了,可以看出處理后鏡頭的右下角,以及綠的發藍了,亮度過高了,這也驗證了鏡頭的陰影并不是完全的中心對稱的。而且也能看出處理后上方還是由一些陰影,如果提拉亮度繼續想要消除陰影,那本來明亮的地方就會溢出,過亮變成白色。所以分區處理像素亮度是最好的,對不同區域進行分別處理,但是這樣也相對復雜。


    以上的多線程版本:

    ? ? ? ? 上面的雖然便于理解但是,運行速度比較慢。樓主寫了個多線程版本并且把他們集合在一個函數里面,但是好像沒快特別多。并不是線程越多越快,因為切換線程和恢復上下文也是需要時間了,當線程大于一定數量反而會更慢。如果大家由改進更快的代碼請和樓主分享一下!

    void *process_chunk(void *arg) {ThreadArg *args = (ThreadArg *)arg;int start = args->start_row;int end = args->end_row;std::vector<std::vector<uint16_t>> *image = args->image_data;uint16_t min_pixel = args->min_p;int heigth = (*image)[0].size();float R = 0.0;int arv_x = (int)(*image).size() / 2;int arv_y = heigth / 2;for (int i = start; i < end; i++){for (int j = 0; j < heigth; j++){// 黑電平矯正(*image)[i][j] -= min_pixel;// 陰影矯正R = (float)abs(sqrt(pow(arv_x - i, 2) + pow(arv_y - j, 2)));if (R > 2800){R = 0;}(*image)[i][j] = (float)((float)10 + (float)(R / 280.0)) * (*image)[i][j];(*image)[i][j] = (*image)[i][j] / 10;if ((*image)[i][j] > 0x3ff){(*image)[i][j] = 0x3ff; // 防止曝光過度}}}delete args;pthread_exit(NULL); }void thread_pre_correction(vector<vector<uint16_t>> &image) {int width = image.size(), heigth = image[0].size(), i, j;uint16_t min_pixel;float R = 0.0;int arv_x = (int)width / 2;int arv_y = (int)heigth / 2;min_pixel = seek_bad_Pixel(image); // 壞點矯正并且返回最小值pthread_t *threads = new pthread_t[THREAD_NUM]; // 創建線程數組int chunk_size = width / THREAD_NUM; // 計算每個線程的任務量for (int t = 0; t < THREAD_NUM; t++){int start = t * chunk_size;int end = (t == THREAD_NUM - 1) ? width : (t + 1) * chunk_size;ThreadArg *args = new ThreadArg;args->start_row = start;args->end_row = end;args->image_data = &image;args->min_p = min_pixel;pthread_create(&threads[t], nullptr, &process_chunk, args);}for (int t = 0; t < THREAD_NUM; t++){pthread_join(threads[t], nullptr); // 等待所有線程處理完畢}delete[] threads; }

    RGB插值(RAW域->RGB域):

    ????????RGB插值是數字圖像處理中的一種方法,用于將原始圖像中的缺失像素值進行估計和填充。RGB是紅、綠、藍三種顏色分量的縮寫,對于一張彩色圖像而言,每個像素都有三個分量的值,分別對應紅、綠、藍三種顏色的亮度值。這里采用最近鄰插值法(Nearest Neighbor Interpolation):將缺失像素的值設置為最近鄰像素的值。這里生成的格式是RGB888,因為是低十位有效,這里再次舍去最低位兩個字節,實際上是損失精度的。

    ? ? ? ? 先給一個簡單插值范例,自己插自己的值R=G=B得出一張純灰色的圖。

    struct Pixel {uint8_t r;uint8_t g;uint8_t b; };vector<vector<Pixel>> color_interpolation_grey(vector<vector<uint16_t>> &image) {int height = image[0].size(), width = image.size();vector<vector<Pixel>> rgbImage(width, vector<Pixel>(height));for (int j = 0; j < width; j++){for (int i = 0; i < height; i++){// 抹干凈高六位image[i][j] = image[i][j] & 0x3FF; // 0000001111111111// 右移兩位image[i][j] = image[i][j] >> 2;rgbImage[i][j].b = image[i][j];rgbImage[i][j].g = image[i][j];rgbImage[i][j].r = image[i][j];}}return rgbImage; }

    ? ? ? ?灰色插值后的圖片:

    ????注意:為了大家更直觀的看清楚我這給大家看的是RGB插值后的BMP圖片的效果!

    ????彩色RGB插值,有多種插值方法。因為每個像素只有一種顏色。比如在RAW格式的圖片中,綠色像素它將缺少紅色,藍色的值,以此類推。所以我們要補齊他的值,讓每一個像素都由三種顏色混色在一起,豐富顏色。對此有多種方法,我給出的代碼是用的相鄰插值法。

    ? ? ? ?這是樓主用的這張RAW圖的格式(GBRG)。

    ? ? ? ? 對于各種顏色的插值:

    顏色/第0行開始RBG紅色藍色綠色(奇數行)綠色(偶數行)
    取值自己取值相鄰四個斜對角取值相鄰上下左右
    取值相鄰四個斜對角取值自己取值相鄰上下左右
    相鄰左右相鄰上下取值自己
    相鄰上下相鄰左右取值自己

    ? ? ? ? 下面給出范例代碼:

    vector<vector<Pixel>> color_interpolation(vector<vector<uint16_t>> &image) {int height = image[0].size(), width = image.size();vector<vector<Pixel>> rgbImage(width, vector<Pixel>(height));for (int i = 0; i < width; i++){for (int j = 0; j < height; j++){int Gcount = 0, Rcount = 0, Bcount = 0;bool Green = ((i % 2 == 0) && (j % 2 == 0)) || ((i % 2 == 1) && (j % 2 == 1));//GBRG格式bool Red = (i % 2 == 1) && (j % 2 == 0);bool Blue = (i % 2 == 0) && (j % 2 == 1);uint16_t temporary_R = 0, temporary_G = 0, temporary_B = 0; // 防止溢出16位來讓八位累加!!if (Green){for (int x = i - 1; x <= i + 1; x++){for (int y = j - 1; y <= j + 1; y++){// 判斷邊界內有效數據if (x >= 0 && x < width && y >= 0 && y < height && !(x == i && y == j)){if ((i % 2 == 0)) // 偶數行紅藍讀取{// 紅色if ((x == i && y == j - 1) || (x == i && y == j + 1)){temporary_R += image[x][y];Rcount++;}// 藍色if ((x == i - 1 && y == j) || (x == i + 1 && y == j)){temporary_B += image[x][y];Bcount++;}}if ((i % 2 == 1)){// 紅色if ((x == i - 1 && y == j) || (x == i + 1 && y == j)){temporary_R += image[x][y];Rcount++;}// 藍色if ((x == i && y == j - 1) || (x == i && y == j + 1)){temporary_B += image[x][y];Bcount++;}}}}}rgbImage[i][j].g = (image[i][j] / 1) >> 2;rgbImage[i][j].r = (temporary_R / Rcount) >> 2;rgbImage[i][j].b = (temporary_B / Bcount) >> 2;}if (Blue){for (int x = i - 1; x <= i + 1; x++){for (int y = j - 1; y <= j + 1; y++){if (x >= 0 && x < width && y >= 0 && y < height && !(x == i && y == j)){// 綠色插值上下左右if ((x == i && y == j - 1) || (x == i && y == j + 1) || (x == i - 1 && y == j) || (x == i + 1 && y == j)){temporary_G += image[x][y];Gcount++;}// 對藍色四個角插值if ((x == i - 1 && y == j - 1) || (x == i + 1 && y == j - 1) || (x == i - 1 && y == j + 1) || (x == i + 1 && y == j + 1)){temporary_B += image[x][y];Bcount++;}}}}rgbImage[i][j].g = (temporary_G / (uint16_t)Gcount) >> 2;rgbImage[i][j].r = (image[i][j] / (uint16_t)1) >> 2;rgbImage[i][j].b = (temporary_B / (uint16_t)Bcount) >> 2;}if (Red){for (int x = i - 1; x <= i + 1; x++){for (int y = j - 1; y <= j + 1; y++){if (x >= 0 && x < width && y >= 0 && y < height && !(x == i && y == j)){// 綠色插值上下左右if ((x == i && y == j - 1) || (x == i && y == j + 1) || (x == i - 1 && y == j) || (x == i + 1 && y == j)){temporary_G += image[x][y];Gcount++;}// 對四角紅色插值if ((x == i - 1 && y == j - 1) || (x == i + 1 && y == j - 1) || (x == i - 1 && y == j + 1) || (x == i + 1 && y == j + 1)){temporary_R += image[x][y];Rcount++;}}}}rgbImage[i][j].g = (temporary_G / (uint16_t)Gcount) >> 2;rgbImage[i][j].r = (temporary_R / (uint16_t)Rcount) >> 2;rgbImage[i][j].b = (image[i][j] / (uint16_t)1) >> 2;}}}return rgbImage; }

    ? ? ? ? 下面是一張RAW圖直RGB接插值后生成BMP的圖片效果:

    ?????????注意:為了大家更直觀的看清楚我這給大家看的是RGB插值后的BMP圖片的效果!

    ? ? ? ? 插值成功的話整個圖片應該是偏向于一種顏色,不一定是綠色,這也是正常的。而且還要對像素觀察一下,如果成功的插值像素都是趨向于一種顏色,綿密的,而不是每個像素都是分明的。下面是正確插值與錯誤插值的像素對比:

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?錯誤? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 正確


    生成一個BMP文件:

    ? ? ? ? BMP是一種通用格式,我們只要把格式頭寫好,然后往里面方RGB數據就行,BMP的寫入方式是倒著寫的,請看下面代碼:

    void Raw_to_Bmp_Pixel16_Enablelow10(vector<vector<Pixel>> &image, const char *filename) {int width = image.size();int height = image[0].size();FILE *pFile = fopen(filename, "wb");if (!pFile){printf("Error: Unable to open file %s\n", filename);return;}// 54個字節的報頭uint32_t bmpSize = width * height * sizeof(uint16_t) + 54;uint32_t offset = 54;// 14個字節的格式頭和40個字節的信息頭fwrite("BM", sizeof(char), 2, pFile);fwrite(&bmpSize, sizeof(uint32_t), 1, pFile);fwrite("\0\0\0\0", sizeof(char), 4, pFile);fwrite(&offset, sizeof(uint32_t), 1, pFile);uint32_t headerSize = 40;uint32_t planes = 1;uint32_t bitsPerPixel = 24;uint32_t compression = 0;uint32_t bmpDataSize = width * height * sizeof(uint16_t);uint32_t resolutionX = 0;uint32_t resolutionY = 0;uint32_t colors = 0;uint32_t importantColors = 0;fwrite(&headerSize, sizeof(uint32_t), 1, pFile);fwrite(&width, sizeof(uint32_t), 1, pFile);fwrite(&height, sizeof(uint32_t), 1, pFile);fwrite(&planes, sizeof(uint16_t), 1, pFile);fwrite(&bitsPerPixel, sizeof(uint16_t), 1, pFile);fwrite(&compression, sizeof(uint32_t), 1, pFile);fwrite(&bmpDataSize, sizeof(uint32_t), 1, pFile);fwrite(&resolutionX, sizeof(uint32_t), 1, pFile);fwrite(&resolutionY, sizeof(uint32_t), 1, pFile);fwrite(&colors, sizeof(uint32_t), 1, pFile);fwrite(&importantColors, sizeof(uint32_t), 1, pFile);for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){Pixel pixel = image[height - 1 - i][j];/*1 2 的讀取方式 3 4 1 23 4*/// uint16_t lowTen = pixel.r & 0x3FF; // 0000001111111111fwrite(&pixel.r, sizeof(uint8_t), 1, pFile);fwrite(&pixel.g, sizeof(uint8_t), 1, pFile);fwrite(&pixel.b, sizeof(uint8_t), 1, pFile);}}fclose(pFile); }

    ? ? ? ? 上面給的一些范例圖片就是BMP格式的圖片的,在這里就不多做展示了。


    使用libjpeg庫把RGB轉化為JPG格式:

    ? ? ? ? 這個庫怎么下載參考這個鏈接:https://blog.csdn.net/qq_62815119/article/details/127709812

    ?記得色彩空間要設置為3,cinfo.input_components = 3; // R, G, B

    ?還有輸入的格式要設置成RGB,?cinfo.in_color_space = JCS_RGB;

    void write_jpeg_file(const char* filename, vector<vector<Pixel>>& data, int width, int height, int quality) {struct jpeg_compress_struct cinfo;struct jpeg_error_mgr jerr;FILE* outfile;JSAMPROW row_pointer[1];int row_stride;cinfo.err = jpeg_std_error(&jerr);jpeg_create_compress(&cinfo);if ((outfile = fopen(filename, "wb")) == NULL) {fprintf(stderr, "can't open %s\n", filename);exit(1);}jpeg_stdio_dest(&cinfo, outfile);cinfo.image_width = width;cinfo.image_height = height;cinfo.input_components = 3; // R, G, Bcinfo.in_color_space = JCS_RGB;jpeg_set_defaults(&cinfo);jpeg_set_quality(&cinfo, quality, TRUE);jpeg_start_compress(&cinfo, TRUE);row_stride = width * 3;while (cinfo.next_scanline < cinfo.image_height) {int y = cinfo.next_scanline;row_pointer[0] = &data[y][0].r;jpeg_write_scanlines(&cinfo, row_pointer, 1);}jpeg_finish_compress(&cinfo);fclose(outfile);jpeg_destroy_compress(&cinfo); }

    ? ? ? ? 下面是這次生成的JPG格式圖:


    ? ? ? ? ?下一期,將分享一下白平衡的具體原理,以及伽馬矯正等其他的一些在YUV或者RGB域要做的處理。如果要代碼,請私信我。

    ? ? ? ? ? 各位大佬有什么需要補充的,或者糾正我的錯誤的請在評論區留言,我會立刻改正。

    總結

    以上是生活随笔為你收集整理的LINUX下简单实现ISP图像处理从RAW到RGB,BMP算法、RGB到JPEG库的使用(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    成年人网站免费观看 | 久久久国产在线视频 | 国产精品视频大全 | 一区二区三区在线观看免费 | 国产一区久久久 | 日韩最新理论电影 | av夜夜操| 亚洲视频2| 亚洲成人免费观看 | 99国产精品视频免费观看一公开 | 五月婷婷色播 | 99在线精品视频观看 | 欧美一区二区三区在线 | 波多野结衣在线观看一区二区三区 | 天天色天天上天天操 | 日日狠狠| 天天操比| 久草精品视频 | 国产这里只有精品 | 精品国产一区二区三区久久影院 | 在线视频久 | 亚洲精品网页 | 婷婷色资源 | 深夜免费福利视频 | 91丨九色丨国产在线观看 | 中文字幕在线观看第二页 | www.色com| 免费av观看 | 黄色网大全| 日韩免费观看高清 | 国产精品久久久久av | 日韩精品免费在线视频 | 国产精品美女免费看 | 欧美日本啪啪无遮挡网站 | 国内丰满少妇猛烈精品播放 | aav在线| 久久精品成人热国产成 | 日本中文字幕在线看 | 成人午夜剧场在线观看 | 国产精品免费小视频 | 久久精品久久久精品美女 | 人人干狠狠干 | 国产精品麻豆视频 | 国产一级黄 | 国产人免费人成免费视频 | 国产精品久久久毛片 | 久草香蕉在线 | 中文字幕在线日亚洲9 | 午夜私人影院 | 91一区啪爱嗯打偷拍欧美 | 九九九热精品免费视频观看网站 | 欧美另类调教 | 99精彩视频在线观看免费 | 99久久久国产精品免费99 | 日韩av影视在线 | 国产一线在线 | 国产免费人成xvideos视频 | 国产在线自 | 麻花天美星空视频 | 国产99免费视频 | 国产高清在线一区 | 99色网站 | av福利第一导航 | 美女免费网站 | 欧美视频在线二区 | av福利在线播放 | 91女神的呻吟细腰翘臀美女 | 精品国产一区二区三区四区vr | 激情五月婷婷综合 | 亚洲国产精品va在线看黑人动漫 | 国产精品99久久久久的智能播放 | 伊人五月天av | 久久 地址 | 免费观看性生交大片3 | 久久亚洲综合国产精品99麻豆的功能介绍 | 四虎影视成人永久免费观看亚洲欧美 | 99视频免费观看 | 国产成人在线观看 | 亚洲成人第一区 | 在线观看播放av | 国产黄a三级三级 | 丁香花五月 | 天天爽人人爽夜夜爽 | 天天插日日插 | 在线观看爱爱视频 | 国产高清黄 | 久久久久久久网 | 久久久91精品国产一区二区精品 | 亚洲第二色 | 99久久这里有精品 | 亚洲午夜精品久久久久久久久久久久 | 在线观看一区二区视频 | 国产区精品在线观看 | 久久国产一区二区三区 | 久草视频免费观 | 免费观看视频的网站 | 天天天射 | av久久久久久 | 成人动漫一区二区三区 | 亚洲视频免费在线观看 | 国产在线观看地址 | 国产精品系列在线 | 激情综合网五月激情 | 黄色免费网站下载 | 91大神电影 | 91av视频| 一区二区三区在线视频111 | 国产午夜麻豆影院在线观看 | 在线观看国产一区二区 | 免费看国产精品 | 久久人人做 | 日本久久91 | 麻豆精品传媒视频 | 中文字幕一区二区三区久久 | 亚洲一区二区视频在线 | 国产91影院 | 国产亚洲精品成人av久久影院 | 欧美欧美 | 在线精品视频免费观看 | 国产精品久久久久久爽爽爽 | 日韩视频一区二区在线 | 久久久蜜桃一区二区 | 久久久久网址 | 激情五月婷婷网 | 亚洲视频每日更新 | 999免费视频 | 丝袜av网站 | 麻豆国产精品一区二区三区 | av免费观看网站 | 91精品爽啪蜜夜国产在线播放 | 国产精品ⅴa有声小说 | 91av福利视频| 久久99国产精品免费网站 | 日日操操 | 免费人做人爱www的视 | 久久欧美精品 | 国产高清精 | 一区二区精品在线 | 亚洲视频一区二区三区在线观看 | 国产在线毛片 | 碰天天操天天 | 久久夜色精品国产欧美乱极品 | 国产在线一区二区三区播放 | 亚洲精选视频在线 | 久久久久久黄 | 午夜视频在线观看欧美 | 成人国产精品电影 | 视频国产区| 欧美午夜视频在线 | 亚洲精品1234区 | 夜添久久精品亚洲国产精品 | 亚洲综合精品视频 | 成人av一级片 | 日韩精品黄| 中文字幕黄色av | 色综合色综合色综合 | 天堂网一区二区三区 | 免费在线观看不卡av | 成年人免费看的视频 | 在线精品视频免费播放 | 四虎在线免费观看 | 五月天欧美精品 | 中文字幕视频三区 | 国产精品视频一二三 | 一区二区三区四区影院 | 日本深夜福利视频 | 天堂久色 | 日韩av电影中文字幕在线观看 | 国产精品手机看片 | 日韩区视频 | 日韩欧美视频在线播放 | 色婷婷综合久色 | 国产资源在线播放 | 国产精品国产三级国产aⅴ9色 | 在线a人v观看视频 | 啪啪av在线| 一区二区三区在线电影 | 国内久久视频 | 蜜桃视频成人在线观看 | 极品嫩模被强到高潮呻吟91 | 国产又粗又猛又黄又爽 | 综合色在线观看 | 亚洲精品久久久久中文字幕二区 | 激情丁香综合五月 | 成人不用播放器 | 最近中文字幕国语免费av | 欧美日在线 | 丁香综合 | 特黄特色特刺激视频免费播放 | 国产高清久久久久 | 黄色免费网站下载 | 成人超碰在线 | 福利视频午夜 | 人人看人人做人人澡 | 人人射人人插 | 丁香九月激情综合 | 97在线视频免费看 | 天天色综合1 | av大全在线观看 | 久久视频国产 | 午夜电影av| 国产中文在线视频 | 一区二区三区四区精品 | 国产免费av一区二区三区 | 2023亚洲精品国偷拍自产在线 | 在线观看精品视频 | 久久久久久久久免费 | 在线 高清 中文字幕 | 色天堂在线视频 | 国产高清免费视频 | 国产五月天婷婷 | 日日夜夜网 | 亚洲,国产成人av | 一区二区三区四区不卡 | 爱爱一区 | 久草视频免费在线观看 | 色五月成人 | 欧美日韩一区二区三区在线观看视频 | 亚洲精品一区二区久 | 天天干,天天操 | 久久九九久久精品 | 久久精品亚洲精品国产欧美 | 日韩av电影免费观看 | 久久伦理电影 | 一级大片在线观看 | 国产涩图 | 国产精品网在线观看 | 天天做日日爱夜夜爽 | 成人免费看黄 | av在线不卡观看 | 久久久免费毛片 | 精品国产中文字幕 | 99精品国产99久久久久久福利 | 国产成人黄色av | 精品视频一区在线观看 | www.黄色小说.com| 国产精品9999久久久久仙踪林 | 99 精品 在线| 五月天久久久久 | 国产精品99免视看9 国产精品毛片一区视频 | 免费看一级 | 麻花传媒mv免费观看 | 欧美一区二区三区在线视频观看 | 日韩精品视频第一页 | 国产99精品在线观看 | 欧美成人亚洲成人 | 精品一区二区电影 | 国产亚洲精品久久久久久移动网络 | 免费一级片在线观看 | 99热在| 91久久精| 视频福利在线观看 | 亚洲精品国产麻豆 | 激情网五月天 | 国语自产偷拍精品视频偷 | 婷婷色伊人 | 天天舔天天射天天操 | 最近免费观看的电影完整版 | 亚洲精品视频免费看 | 国产精品久久久久久久免费大片 | 日韩欧美一区二区三区黑寡妇 | 色综合久久综合 | 日韩电影一区二区在线 | 美女在线免费视频 | 四虎国产精 | 亚洲国产欧洲综合997久久, | 国产一级在线播放 | 日韩中文字幕电影 | 日韩欧美一区二区在线观看 | 国产精成人品免费观看 | 四虎www| a视频在线播放 | 99国产精品免费网站 | 久草在线 | 网站免费黄 | 免费在线观看中文字幕 | 亚洲精选视频免费看 | 在线免费观看欧美日韩 | 国产精品福利午夜在线观看 | 亚洲国产影院av久久久久 | 国产日韩欧美在线观看视频 | av在线电影免费观看 | 亚洲精品小视频在线观看 | 超碰免费97| 国产美腿白丝袜足在线av | 欧美午夜剧场 | 国产精品自拍在线 | 在线观看视频99 | 四月婷婷在线观看 | 丰满少妇麻豆av | 中文字幕日韩有码 | 91精品视频免费在线观看 | 亚洲人成在 | 在线中文字母电影观看 | 99精品视频免费观看视频 | 婷五月天激情 | 黄色在线观看免费网站 | 色婷婷中文| 欧美影院久久 | 狠狠做深爱婷婷综合一区 | 亚洲一二视频 | 黄色av一级片 | 成人黄色在线播放 | 91福利小视频 | 国产一级淫片免费看 | 色综合天天射 | 精品一区二区日韩 | 久久精品久久精品久久精品 | 六月丁香激情网 | 色资源在线观看 | 久久字幕| 久久久国产精品一区二区三区 | 久久成人免费电影 | 成人午夜电影久久影院 | 亚洲国产大片 | 美女网站视频一区 | 国产婷婷色 | 国产成人精品亚洲精品 | 91麻豆精品国产91 | 国产午夜在线观看 | 中文字幕国产精品 | 91视频高清完整版 | 亚洲第一色 | 日韩精品一区二区三区高清免费 | 免费无遮挡动漫网站 | 久久免费精品视频 | 99久久精品国产免费看不卡 | 国产精品一区二区三区在线免费观看 | 免费的黄色av | 久久国产精品免费观看 | www.神马久久 | 中文字幕一区二区三区在线视频 | 成人禁用看黄a在线 | 九草视频在线 | 久久网址| 叶爱av在线| 天天操天天添天天吹 | 国内精品久久久久久久久久清纯 | 黄色免费视频在线观看 | 在线观看国产成人av片 | 国产涩涩在线观看 | 深夜国产在线 | 日韩午夜av | 久久不射影院 | av千婊在线免费观看 | 久久精品视频在线免费观看 | 日韩精品免费 | 黄色一二级片 | 久久精品国产亚洲a | 色免费在线 | 五月视频 | 66av99精品福利视频在线 | 国产精品片 | 成年美女黄网站色大片免费看 | 国产成人av电影在线观看 | 久草网免费| 欧美另类高清 | 久久成人午夜 | 高清不卡毛片 | 97福利社| 国产精品中文字幕在线播放 | 色综合久久久久久久 | 国产成人av电影在线 | 欧美爽爽爽 | 黄色影院在线播放 | www久草 | 国产精品99久久久久人中文网介绍 | 狠狠地操 | 亚洲精品乱码久久久久 | 日韩中文字幕免费视频 | av一区在线 | 黄色软件在线观看视频 | 久久久国产精品视频 | 亚洲一区日韩精品 | 免费开视频 | 天天干天天玩天天操 | av网站免费在线 | 成人午夜影视 | www.com在线观看 | 久久中文字幕视频 | 国精产品999国精产品视频 | 999国内精品永久免费视频 | 丁香六月在线 | 婷婷色网视频在线播放 | 国产视频一区二区在线 | 波多野结衣视频网址 | 一区二区影院 | 岛国一区在线 | 亚洲日韩中文字幕在线播放 | 成人免费毛片aaaaaa片 | 国产一区免费在线 | 999成人 | 亚洲精品视频偷拍 | 美女黄久久 | 亚洲午夜在线视频 | 日日干天夜夜 | 又黄又刺激视频 | a国产精品| 日韩免费看的电影 | 精品国产乱码久久久久久1区2匹 | 色视频网页 | 国产成人一区二区三区免费看 | 日韩欧美国产精品 | av电影不卡| 久久综合狠狠综合 | av中文字幕在线观看网站 | 国产精品第52页 | 99久久9| 成人亚洲综合 | 超碰在线最新地址 | 久久精品屋| 成人在线免费视频 | 久久午夜影院 | 美女视频网 | 欧美一级免费在线 | 日本精品一区二区在线观看 | 97视频免费播放 | 婷婷av综合 | 国产精品久久久精品 | 国产视频黄 | 在线看国产日韩 | 亚洲视频免费在线观看 | 国产中文字幕在线播放 | 手机在线欧美 | 香蕉视频国产在线观看 | 国产午夜三级一二三区 | 日韩欧美在线一区 | 免费观看黄色12片一级视频 | 久久久久免费精品视频 | 91女子私密保健养生少妇 | 人人射人人爽 | 精品一区二区久久久久久久网站 | 96超碰在线 | 国产一区在线观看视频 | 黄a在线| 在线观看 国产 | 18久久久久 | 日本资源中文字幕在线 | 免费观看午夜视频 | 六月丁香综合 | 免费在线观看av网址 | 国产精品视频免费 | 国产高清av免费在线观看 | 91麻豆文化传媒在线观看 | 国产高清一级 | 深爱开心激情网 | 色播五月激情综合网 | 久久99免费 | 日韩乱色精品一区二区 | av三级在线免费观看 | 日本午夜免费福利视频 | 午夜国产福利在线观看 | av福利超碰网站 | 精品久久福利 | 97在线影视 | 97超碰人人看 | 色999五月色 | av免费网站 | 99一区二区三区 | 久久国产精品99久久久久久丝袜 | 日韩免费在线观看网站 | 五月激情丁香婷婷 | 久久精品视频在线观看免费 | 中文国产在线观看 | 中文字幕日韩在线播放 | 四虎成人精品在永久免费 | 97成人资源站 | aaa黄色毛片| 国产一区欧美一区 | 麻豆视频免费播放 | 日日爽日日操 | 日韩一区二区三区高清免费看看 | 人人射人人插 | 伊人看片 | 免费黄色av电影 | 中文字幕日韩在线播放 | 在线国产91 | 中文字幕av日韩 | 97电影院网| 美女视频黄免费网站 | av高清一区二区三区 | 热久久影视 | 色姑娘综合| 欧美精品一区二区免费 | 国产精品 亚洲精品 | 一区二区三区在线观看免费视频 | 亚洲视频资源在线 | 奇米777777 | 日韩精品一区二区三区外面 | 日本韩国精品在线 | 97视频网站 | 精品a在线 | 五月婷婷综合激情网 | 在线网站黄 | 粉嫩av一区二区三区入口 | 精品久久久久一区二区国产 | 色婷婷激情电影 | 色在线免费视频 | 国产资源免费 | www.eeuss影院av撸| 国产精品区二区三区日本 | 精品国产一区二区三区在线观看 | 欧美日韩视频免费 | 久久久久久亚洲精品 | www国产亚洲精品久久网站 | 欧美韩国日本在线 | 国产第一页在线播放 | 精品电影一区 | 国产精品一区在线 | 国产精品99久久久久 | 日本视频不卡 | 中文字幕国产精品一区二区 | 国产网红在线 | 日韩欧美精品在线 | 91干干干 | 国产福利一区二区三区在线观看 | www毛片com| 国产欧美精品一区二区三区 | 日韩视频在线观看视频 | 九九热免费精品视频 | 热99久久精品 | 亚洲人成免费网站 | 99久久影院| 久久免费a | 免费午夜视频在线观看 | 日本h在线播放 | 久久婷婷国产色一区二区三区 | 国产综合香蕉五月婷在线 | 日韩美精品视频 | 四虎在线免费视频 | 欧美在线你懂的 | 国产高清成人 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 久久精品免视看 | 草久中文字幕 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 欧洲色综合 | 色中色资源站 | avsex| 草免费视频 | 久久综合免费视频影院 | 国产精品96久久久久久吹潮 | 91香蕉久久 | 国产精品中文 | 亚洲第一区在线播放 | 亚洲日本在线一区 | 精品国精品自拍自在线 | 96视频在线 | 国产精品99久久99久久久二8 | 日韩免费在线看 | 久久久wwww| 欧美一区二区三区在线播放 | 日日操日日插 | 99久久精品久久久久久动态片 | 久久国内精品 | www操操操 | 亚洲日本成人 | 亚洲精品国产品国语在线 | 国内精品久久久久久久影视麻豆 | 97韩国电影 | 亚洲久草网 | 欧美日视频 | 免费91在线观看 | 在线观看一区 | 国产精品久久二区 | 婷婷久久久久 | 狠狠地日 | 五月天激情综合 | 精品乱码一区二区三四区 | 337p日本欧洲亚洲大胆裸体艺术 | 最近最新mv字幕免费观看 | 成人欧美亚洲 | 日本在线观看中文字幕无线观看 | 黄色a在线 | 国产免费又粗又猛又爽 | 日韩a在线看 | 操操操com | 国产护士hd高朝护士1 | 日韩欧美视频一区二区三区 | 久久综合久久综合久久 | 中文字幕在线国产 | 亚洲成a人片77777kkkk1在线观看 | 日韩欧美在线第一页 | 91av观看| 日韩精品在线视频 | 色综合久久综合中文综合网 | 一级做a视频 | 免费欧美高清视频 | 在线观看视频亚洲 | 久久精品综合一区 | 国产成人精品一区二区三区在线 | 久久神马影院 | 97超级碰碰 | 亚洲高清视频一区二区三区 | 黄色软件在线观看 | 欧美极品xxx| 亚洲精品中文字幕视频 | 在线va视频 | 久久综合九色综合久99 | 久久久久9999亚洲精品 | 天天综合网 天天 | 国产视频一二区 | 免费看搞黄视频网站 | 中文字幕乱码日本亚洲一区二区 | 精品国产大片 | 亚洲理论视频 | 黄色精品在线看 | 麻豆国产网站入口 | 日日干日日 | 欧美日韩高清一区 | 久操伊人 | 国产在线专区 | 天天干天天拍 | 日产乱码一二三区别免费 | 久草在线精品观看 | 在线性视频日韩欧美 | 亚洲天堂网在线视频观看 | 成人久久精品 | 日韩美在线| 成年人黄色免费网站 | 久久久影视 | 国产黄色电影 | 在线有码中文 | 日韩xxxxxxxxx | 欧美在线视频一区二区三区 | 欧美精品做受xxx性少妇 | 久久夜色精品国产欧美乱 | 亚洲精品乱码 | 日本夜夜草视频网站 | 亚洲国产三级在线观看 | 成年人在线免费看 | 欧美男同视频网站 | 五月婷婷激情综合网 | 国产精品第10页 | av超碰在线观看 | 亚洲成人网在线 | 久久精品国产精品亚洲 | 亚洲精品女人久久久 | 二区视频在线观看 | 国产精品白浆视频 | 国产美女精彩久久 | 色综合久久88色综合天天免费 | 日韩av网址在线 | 国产黄色片一级三级 | 国产精品999久久久 久产久精国产品 | 亚洲va在线va天堂va偷拍 | 日日操网站 | 国产一级免费视频 | 深爱综合网 | 91人人网| 国产1区2区3区在线 亚洲自拍偷拍色图 | 国产视频资源在线观看 | 亚洲精品乱码久久久一二三 | 国产午夜精品福利视频 | 国产精品久久久久av福利动漫 | 亚洲 综合 国产 精品 | 免费国产一区二区视频 | 国产精品色婷婷视频 | 国产黄网在线 | 婷婷国产在线 | 91亚色视频在线观看 | 久久er99热精品一区二区 | 免费在线观看国产精品 | 欧美日韩二三区 | 四虎在线免费视频 | 成人在线免费观看网站 | 精品国产三级 | 麻豆91在线看 | 久久久久久久久久久久久国产精品 | 最新影院 | 国产999精品 | av在线进入 | 极品美女被弄高潮视频网站 | 免费三级a | 欧美成人精品三级在线观看播放 | 精品国内自产拍在线观看视频 | 一级大片在线观看 | 日韩一级电影网站 | 成人在线观看你懂的 | 91chinesexxx| 久久国产精品一区二区三区 | 成人av片免费观看app下载 | 丁香花在线观看免费完整版视频 | 四虎国产永久在线精品 | 日本中文字幕在线看 | 日韩二区在线观看 | 久热免费 | 中文字幕在线观看播放 | 国产一区二区精 | 久久精品香蕉视频 | 亚洲va欧美va人人爽春色影视 | 欧美日本一二三 | 久久久受www免费人成 | 久久久久北条麻妃免费看 | 久久的色 | 亚洲伦理一区二区 | 狠狠久久婷婷 | 在线观看色网站 | 久久久久久久久久久精 | 丁香电影小说免费视频观看 | 黄色a一级视频 | 激情久久伊人 | 91在线观 | 国产美女在线免费观看 | 欧美久久成人 | 日批视频在线观看免费 | 九九免费视频 | 久久精品三| 91在线国产观看 | 亚洲尺码电影av久久 | 日韩大片免费在线观看 | 黄色大片国产 | 久久夜夜爽 | 久久视频免费在线 | 国产一级二级三级视频 | 国产中文字幕在线免费观看 | 在线国产视频一区 | 日韩v在线91成人自拍 | 中文字幕123区 | 国产精品九九久久99视频 | 在线观看自拍 | 久久高清免费 | 欧美成人播放 | 国产精品视频免费 | 国产精品久久久久久久久久久久午夜 | 国产免费国产 | 美女视频是黄的免费观看 | 亚洲精品视频免费看 | 二区在线播放 | 亚洲在线日韩 | 欧美日韩高清在线观看 | 免费看污的网站 | 99色国产| 精品一区二区免费在线观看 | 午夜精品一区二区三区在线播放 | 成人av电影免费在线播放 | 欧美久久影院 | 国产成人精品在线观看 | 精产嫩模国品一二三区 | 免费一级特黄录像 | 在线播放视频一区 | 欧美视频国产视频 | av电影免费观看 | 最近高清中文字幕在线国语5 | 日韩91av| 免费中午字幕无吗 | 美女网站黄在线观看 | 久久久受www免费人成 | av韩国在线| 亚洲精品小区久久久久久 | 久久亚洲婷婷 | 午夜精品视频免费在线观看 | 亚洲欧美激情精品一区二区 | 亚洲电影影音先锋 | 日日干综合 | 免费看污片 | 欧美 激情在线 | 黄色一二级片 | 日韩免费观看av | 国产精品av免费在线观看 | 久久久久免费精品国产小说色大师 | 99精品欧美一区二区三区黑人哦 | 精品影院 | 成人三级网站在线观看 | 色丁香久久 | 欧美亚洲一级片 | 久久超碰网 | 欧美国产在线看 | 国产欧美最新羞羞视频在线观看 | 亚洲激情在线观看 | 久久夜视频 | 丁香六月国产 | 黄色免费网战 | 成人精品视频久久久久 | 日韩精品一区二区三区免费视频观看 | 国产精品成人av久久 | 午夜精品视频免费在线观看 | 久久精品视频观看 | 国内精品久久久久久久97牛牛 | 99中文在线| 毛片视频电影 | 亚洲综合色丁香婷婷六月图片 | 不卡的av在线 | 国产精品久久一区二区三区不卡 | 人人爽人人射 | 成年人免费观看在线视频 | 久久大片| www.亚洲精品视频 | 9色在线视频| 久久精品国产99国产 | 国产三级视频 | 美女免费视频一区 | 黄污视频网站大全 | 欧美一进一出抽搐大尺度视频 | 玖操 | 992tv在线观看 | 天天干,天天操 | av免费在线观看网站 | 免费成人在线网站 | 成人欧美日韩国产 | 99久久激情 | 人人澡人人干 | 综合久久五月天 | 国产精品色视频 | 国产一级二级在线播放 | 波多野结衣精品视频 | 91麻豆精品一区二区三区 | av夜夜操 | 91在线影视 | 天天夜夜亚洲 | 久久久久久久久久亚洲精品 | 97电影院网| 天天草天天爽 | 一区二区三区在线观看中文字幕 | 91av视屏 | 国产精品免费看久久久8精臀av | 国产96在线视频 | 午夜天使 | 狠狠的操你 | 二区三区中文字幕 | 国产精品爽爽久久久久久蜜臀 | 在线观看日韩中文字幕 | 99综合电影在线视频 | 97在线观看免费观看高清 | 色综合天天视频在线观看 | 亚洲黄色成人网 | av视屏在线 | 偷拍福利视频一区二区三区 | www五月天com | 三级黄在线| 黄色大片国产 | 国产色女人 | 久久人人做 | 亚洲精品乱码久久久久久蜜桃91 | 日韩精品黄 | 国产一区观看 | 午夜av免费 | 久要激情网 | 九九日韩| 亚洲激情婷婷 | 91精品国自产在线 | 国内精品免费久久影院 | 黄色软件在线观看视频 | 毛片一级免费一级 | 久久免费视频这里只有精品 | 亚洲少妇久久 | 国产精品第三页 | 日本精品一区二区三区在线观看 | 国产一级片免费视频 | 欧美一级在线观看视频 | 亚洲色五月| 天天操狠狠干 | 成人综合婷婷国产精品久久免费 | 天天综合网 天天综合色 | 亚洲高清激情 | 在线看国产视频 | 国产成人高清在线 | 亚洲国产精久久久久久久 | 97视频免费观看2区 亚洲视屏 | 在线免费观看国产 | 国产91勾搭技师精品 | 奇米先锋| 日一日干一干 | 久久人人97超碰com | 亚洲五月花 | 欧美精品资源 | 精品久久久久久久久中文字幕 | 国产伦理一区二区 | 日韩久久视频 | 免费观看第二部31集 | 9在线观看免费高清完整版 玖玖爱免费视频 | 久久99精品久久久久久秒播蜜臀 | 97av色 | 中文字幕在线视频免费播放 | 狠狠狠狠狠狠操 | 91av在线看 | 久久国产精品99久久久久久进口 | 亚洲精品激情 | 成人app在线免费观看 | 日韩精品一区电影 | 在线高清一区 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 国产偷国产偷亚洲清高 | 久久免费电影网 | 国产精品久久久久久久电影 | 国产精品福利无圣光在线一区 | 狠狠插狠狠干 | 夜色成人网 | 五月婷婷丁香激情 | 免费高清在线观看成人 | 在线成人小视频 | 青青草久草在线 | 日韩试看 | 精品中文字幕在线播放 | 国产一区二区高清视频 | 色五月激情五月 | 中文字幕视频在线播放 | 久久久免费精品视频 | 九九免费在线观看视频 | 久久精品国产一区 | 欧美尹人 | 国产91精品看黄网站在线观看动漫 | 日韩在线一区二区免费 | 亚洲视频 视频在线 | a级国产乱理伦片在线观看 亚洲3级 | 一区二区激情视频 | 国产在线资源 | 久久久久久免费视频 | 国产成人三级一区二区在线观看一 | 欧美作爱视频 | 欧美日韩伦理在线 | 日日夜夜人人天天 | 国产精品综合久久久 | 黄色成人毛片 | 国产麻豆剧果冻传媒视频播放量 | 精品一区二区亚洲 | 五月激情综合婷婷 | 日韩啪视频 | 97成人在线免费视频 | 色先锋资源网 | 国产黄色高清 | 国产真实精品久久二三区 | 日本精品小视频 | 在线综合色 | www最近高清中文国语在线观看 | 99精品热 | 国产成人一区二区在线观看 | 国产精品久久久久久久7电影 | 中文在线亚洲 | 国产亚洲一区二区在线观看 | 在线观看国产高清视频 | 99久久毛片 | 亚洲成熟女人毛片在线 | 亚洲精品www久久久 www国产精品com | 色干综合 | 精品999在线观看 | 久久在现 | 亚洲精品中文字幕视频 | 久久国产精品影视 | av一区二区三区在线播放 | 91成熟丰满女人少妇 | 国内小视频在线观看 | 欧美日韩天堂 | 五月天久久久 | 99久久久久久久久 | 狠狠ri | 男女激情免费网站 | 久久男女视频 | 888av| 日韩精品一卡 | 亚洲综合少妇 | 亚洲精品午夜aaa久久久 | 久久综合色婷婷 | 婷婷五情天综123 | 狠狠ri | 亚洲精品久久久蜜桃直播 | 中文字幕国产在线 | 在线精品观看国产 | 成人动漫一区二区 | 亚洲久草在线 | 夜色资源网 | 国产a视频免费观看 | 一级片黄色片网站 | 成人一区影院 | 天天天天天天天天操 | 午夜av在线免费 | 久久综合亚洲鲁鲁五月久久 | 欧美日韩一区二区视频在线观看 | 91色国产| 久草网首页 | 精品特级毛片 | 日本中文乱码卡一卡二新区 | 婷婷色资源 | 啪啪凸凸 | 国产成年人av| 色婷婷一| 亚洲 欧美日韩 国产 中文 | 在线观看中文字幕2021 | 国产99视频在线观看 | 91av视频在线免费观看 | 成人在线视频在线观看 | 中文国产在线观看 | 国产精品一区二区吃奶在线观看 | 黄色一级网 | 2017狠狠干| 在线观看av麻豆 | 国产免费黄色 | 欧美精品在线免费 | 国产日韩精品欧美 | 精品av网站 | 黄色午夜 | 日本激情中文字幕 | 性色av香蕉一区二区 | 91字幕| 超碰国产97 | 国产一级免费视频 | 国产久视频 | 国产一级免费在线 |