python
import cv2 as cv
src = cv.imread("D:/vcprojects/images/test.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()
c++
#include "all.h"
using namespace std;
using namespace cv;
void MyClass::day004() {
Mat img = read(PATH + "images\\test.jpg");
if (img.empty()) {
printf("can't open image");
return;
}
imshow("input", img);
int rows = img.rows;
int cols = img.cols;
int cnnel = img.channels();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (cnnel == 3)
{
Vec3b bgr = img.at<Vec3b>(i, j);
bgr[0] -= 255;
bgr[1] -= 255;
bgr[2] -= 255;
img.at<Vec3b>(i, j) = bgr;
}
else if (cnnel == 1) {
int gray = img.at<uchar>(i, j);
gray -= 255;
img.at<uchar>(i, j) = gray;
}
}
}
imshow("outputByDirectlyRead", img);
Mat result = Mat::zeros(img.size(), img.type());
int blue = 0; int green = 0; int red = 0;
int gray;
for (int i = 0; i < rows; i++) {
uchar *curr_row = img.ptr<uchar>(i);
uchar *result_row = result.ptr<uchar>(i);
for (int j = 0; j < rows; j++) {
if (cnnel == 3) {
blue = *curr_row++;
green = *curr_row++;
red = *curr_row++;
*result_row++ = blue;
*result_row++ = green;
*result_row++ = red;
}
else if (cnnel == 1) {
gray = *curr_row++;
*result_row++ = gray;
}
}
}
imshow("outputByPtrRead", result);
waitKey(0);
}
c++代码中的新知识点:
- Vec3b的使用
- 模板方法:Mat::at<type>(row, col);取某个像素点
- 模板方法:Mat::ptr<type>(row);指向一行像素的起始地址
- 数据类型:uchar
网友评论