3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
fanfuhan OpenCV 教學004 ~ opencv-004-圖像像素讀寫操作 資料來源: https://fanfuhan.github.io/ https://fanfuhan.github.io/2019/03/21/opencv-004/ GITHUB:https://github.com/jash-git/fanfuhan_ML_OpenCV C++ #include #include using namespace std; using namespace cv; /** * 读取图像,实现像素反转 */ int main() { Mat src = imread("../images/liuyifei_1.png"); Mat src_copy = src.clone(); int height = src.rows; int width = src.cols; int ch = src.channels(); imshow("input", src); // 直接读取图像像素 for (int row = 0; row < height; ++row) { for (int col = 0; col < width; ++col) { if (ch == 3) { Vec3b bgr = src.at(row, col); bgr[0] = 255 - bgr[0]; bgr[1] = 255 - bgr[1]; bgr[2] = 255 - bgr[2]; src.at(row, col) = bgr; } else if (ch == 1) { int gray = src.at(row, col); src.at(row, col) = 255 - gray; } } } imshow("output1", src); // 指针读取 Mat result = Mat::zeros(src_copy.size(), src_copy.type()); int blue = 0, green = 0, red = 0; int gray; for (int row = 0; row < height; ++row) { // curr_row为第row行的首地址,遍历时,前三个字节表示的是第一个像素的BGR值, // 注意BGR值顺序,接下来三个字节是第二个像素的值。 uchar *curr_row = src_copy.ptr(row); uchar *result_row = result.ptr(row); for (int col = 0; col < width; ++col) { if (ch == 3) { blue = *curr_row++; green = *curr_row++; red = *curr_row++; *result_row++ = 255 - blue; *result_row++ = 255 - green; *result_row++ = 255 - red; } else if (ch == 1) { gray = *curr_row++; *result_row++ = gray; } } } Python import cv2 as cv src = cv.imread("../images/liuyifei_1.png") cv.namedWindow("input", cv.WINDOW_AUTOSIZE) cv.imshow("input", src) h, w, ch = src.shape print("h , w, ch", h, w, ch) for row in range(h): for col in range(w): b, g, r = src[row, col] b = 255 - b g = 255 - g r = 255 - r src[row, col] = [b, g, r] cv.imshow("output", src) cv.waitKey(0) cv.destroyAllWindows()

本文由jashliaoeuwordpress提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦