Untitled
unknown
plain_text
5 months ago
3.7 kB
3
Indexable
//blur #include <jni.h> #include <cstring> // Hàm làm mờ ảnh YUV420 extern "C" JNIEXPORT void JNICALL Java_com_example_yourapp_YUVProcessor_blurYUV(JNIEnv *env, jobject thiz, jbyteArray inputYUV, jint width, jint height, jint kernelSize) { int frameSize = width * height; // Kích thước phần Y int uvSize = frameSize / 2; // Kích thước phần UV // Lấy dữ liệu từ mảng Java jbyte *yuv = env->GetByteArrayElements(inputYUV, nullptr); // Tạo bộ nhớ tạm để lưu phần Y đã làm mờ unsigned char *tempY = new unsigned char[frameSize]; // Làm mờ phần Y for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int sum = 0; int count = 0; // Kernel kích thước kernelSize x kernelSize for (int ky = -kernelSize / 2; ky <= kernelSize / 2; ky++) { for (int kx = -kernelSize / 2; kx <= kernelSize / 2; kx++) { int ny = y + ky; int nx = x + kx; // Kiểm tra pixel nằm trong giới hạn ảnh if (ny >= 0 && ny < height && nx >= 0 && nx < width) { sum += yuv[ny * width + nx]; count++; } } } // Gán giá trị trung bình vào pixel mới tempY[y * width + x] = static_cast<unsigned char>(sum / count); } } // Ghi lại phần Y đã làm mờ vào mảng YUV memcpy(yuv, tempY, frameSize); // Giữ nguyên phần UV // Không cần làm gì vì UV không thay đổi // Giải phóng bộ nhớ tạm delete[] tempY; // Ghi lại thay đổi vào mảng Java env->ReleaseByteArrayElements(inputYUV, reinterpret_cast<jbyte *>(yuv), 0); } //sharpen #include <jni.h> #include <cstring> // Hàm sharpen ảnh YUV420 extern "C" JNIEXPORT void JNICALL Java_com_example_yourapp_YUVProcessor_sharpenYUV(JNIEnv *env, jobject thiz, jbyteArray inputYUV, jint width, jint height) { int frameSize = width * height; // Kích thước phần Y jbyte *yuv = env->GetByteArrayElements(inputYUV, nullptr); // Bộ nhớ tạm để lưu phần Y đã xử lý unsigned char *tempY = new unsigned char[frameSize]; // Kernel sharpen 3x3 int kernel[3][3] = { { 0, -1, 0 }, { -1, 5, -1 }, { 0, -1, 0 } }; // Áp dụng kernel cho phần Y for (int y = 1; y < height - 1; y++) { for (int x = 1; x < width - 1; x++) { int sum = 0; // Duyệt qua kernel 3x3 for (int ky = -1; ky <= 1; ky++) { for (int kx = -1; kx <= 1; kx++) { int ny = y + ky; int nx = x + kx; sum += yuv[ny * width + nx] * kernel[ky + 1][kx + 1]; } } // Giới hạn giá trị pixel từ 0 đến 255 sum = sum < 0 ? 0 : (sum > 255 ? 255 : sum); // Gán pixel đã xử lý vào bộ nhớ tạm tempY[y * width + x] = static_cast<unsigned char>(sum); } } // Copy phần Y đã xử lý trở lại mảng YUV memcpy(yuv, tempY, frameSize); // Giữ nguyên phần UV // Không cần làm gì vì UV không thay đổi // Giải phóng bộ nhớ tạm delete[] tempY; // Ghi lại thay đổi vào mảng Java env->ReleaseByteArrayElements(inputYUV, reinterpret_cast<jbyte *>(yuv), 0); } //add index opencv
Editor is loading...
Leave a Comment