Различия в форматах цветового кодирования изображений, таких как NV21, NV12, YV12, RGB, YUV, RGBA, RGBX8888 и т. д.
Различия в форматах цветового кодирования изображений, таких как NV21, NV12, YV12, RGB, YUV, RGBA, RGBX8888 и т. д.

Часто используемые форматы кодирования цвета изображения

NV21, NV12, YV12, RGB, YUV, RGBA и RGBX8888 — это распространенные форматы кодирования цвета изображения. Основное различие между ними заключается в цветовом пространстве и расположении данных.

  1. NV21: NV21 — это формат кодирования цвета изображения, используемый системой Android. Он использует метод выборки YUV 4:2:0, что означает, что каждые два пикселя отбираются один раз в вертикальном направлении, а каждый пиксель — дважды в горизонтальном направлении. . Компонент Y NV21 представляет собой информацию о яркости, а компоненты V и U представляют собой информацию о цветности (представляющую насыщенность и оттенок соответственно).
  2. NV12: NV12 — это формат кодирования цвета, используемый для кодирования и декодирования видео. Он также использует метод выборки YUV 4:2:0. Компонент Y NV12 представляет собой информацию о яркости, а компоненты V и U также являются информацией о цветности. Разница в том, что, в отличие от NV21, компоненты Y, V и U NV12 используют разные частоты дискретизации, то есть каждые два пикселя отбираются в вертикальном направлении, а каждый второй пиксель — в горизонтальном.
  3. YV12: YV12 — это распространенный формат видеокодека, в котором также используется метод выборки YUV 4:2:0. Компонент Y YV12 представляет собой информацию о яркости, а компоненты V и U также являются информацией о цветности. Разница в том, что компоненты Y, V и U YV12 используют разные частоты дискретизации, то есть каждые два пикселя отбираются в вертикальном направлении, а каждый второй пиксель отбирается в горизонтальном направлении.
  4. RGB: RGB — это распространенный формат кодирования цветов, в котором для компоновки изображений используются красный, зеленый и синий цвета. Компоненты R, G и B RGB представляют интенсивность красного, зеленого и синего цветов соответственно. Каждому пикселю в изображении RGB требуется три значения для представления цвета, поэтому его данные располагаются в порядке красного, зеленого и синего.
  5. RGBA: RGBA — это распространенный формат кодирования цвета, аналогичный RGB, но он дополнительно включает альфа-канал для представления прозрачности пикселей. Компоненты R, G и B RGBA представляют интенсивность красного, зеленого и синего цветов соответственно, а A представляет прозрачность.
  6. RGBX8888: RGBX8888 — это распространенный формат кодирования цвета, аналогичный RGBA, но он хранит информацию о цвете и прозрачности пикселей в 32-битных целых числах. Компоненты R, G и B RGBX8888 представляют интенсивность красного, зеленого и синего цветов соответственно, а X представляет прозрачность.
  7. YUY2: YUY2 — это распространенный формат видеокодека, использующий метод выборки YUV 4:2:2. Компонент Y YUY2 представляет собой информацию о яркости, а компоненты U и V представляют собой информацию о цветности (представляющую насыщенность и оттенок соответственно). YUY2 производит выборку каждого второго пикселя по горизонтали и каждых двух пикселей по вертикали.
  8. UYVY: UYVY — это распространенный формат видеокодека, который также использует метод выборки YUV 4:2:2. Компонент Y UYVY представляет собой информацию о яркости, а компоненты U и V представляют собой информацию о цветности (представляющую насыщенность и оттенок соответственно). UYVY производит выборку каждого второго пикселя по горизонтали и каждых двух пикселей по вертикали.

Как соединить типы данных

В этой статье в качестве примера рассматривается модуль RTMP Live Push платформы Android. Дизайн интерфейса перед кодированием видеоизображения выглядит следующим образом:

YUV420888
Язык кода:java
копировать
/*
     * SmartPublisherJniV2.java
     * SmartPublisherJniV2
     *
     * Author: daniusdk.com
     * Created by DaniuLive on 2015/09/20.
     */
    /**
	 * Уровень доставки изображения YUV420888, Интерфейс, специально предназначенный для формата android.graphics.ImageFormat.YUV_420_888 android.media.Image.
	 *
	 * @param index: индекс слоя, Должно быть больше или равно 0
	 *
	 * @param left: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param top: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param y_plane: Соответствует android.media.Image.Plane[0].getBuffer()
	 *
	 * @param y_offset: смещение изображения, Основная цель этого — создание клипов. Обычно передается 0.
	 *
	 * @param y_row_stride: Соответствует android.media.Image.Plane[0].getRowStride()
	 *
	 * @param u_plane: android.media.Image.Plane[1].getBuffer()
	 *
	 * @param u_offset: смещение изображения, Основная цель этого — создание клипов. Обычно передается 0.
	 *
	 * @param u_row_stride: android.media.Image.Plane[1].getRowStride()
	 *
	 * @param v_plane: Соответствует android.media.Image.Plane[2].getBuffer()
	 *
	 * @param v_offset: смещение изображения, Основная цель этого — создание клипов. Обычно передается 0.
	 *
	 * @param v_row_stride: Соответствует android.media.Image.Plane[2].getRowStride()
	 *
	 * @param uv_pixel_stride: Соответствует android.media.Image.Plane[1].getPixelStride()
	 *
	 * @param width: width, Должно быть больше 1, и должно быть четное число
	 *
	 * @param height: height, Должно быть больше 1, и должно быть четное число
	 *
	 * @param  is_vertical_flip: Стоит ли переворачивать вертикально, 0 не переворачивается, 1 флип
	 *
	 * @param  is_horizontal_flip: переворачивать ли по горизонтали, 0 не переворачивается, 1 флип
	 *
	 * @param  scale_width: Ширина шкалы должна быть четным числом, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_height: увеличить масштаб, Должно быть четное число, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_filter_mode: качество масштабирования, Введите 0 и используйте скорость по умолчанию. Дополнительный диапазон уровней: [1,3]. Чем больше значение, тем лучше качество масштабирования. Но чем медленнее скорость
	 *
	 * @param  rotation_degree: вращать по часовой стрелке, Должно быть 0, 90, 180, 270, Примечание. Вращение масштабирует, Сделайте это после вертикальной/водной инверсии, Пожалуйста, обратите внимание на заказ
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageYUV420888ByteBuffer(long handle, int index, int left, int top,
														 ByteBuffer y_plane, int y_offset, int y_row_stride,
												   		 ByteBuffer u_plane, int u_offset, int u_row_stride,
														 ByteBuffer v_plane, int v_offset, int v_row_stride, int uv_pixel_stride,
														 int width, int height, int is_vertical_flip,  int is_horizontal_flip,
														 int scale_width,  int scale_height, int scale_filter_mode,
												   		 int rotation_degree);
YV12

Интерфейс данных YV12 в основном используется для стыковки со сторонними устройствами. u_stride и v_stride этого интерфейса равны (width+1)/2 соответственно. Если исходящие данные необходимо повернуть, угол поворота можно контролировать с помощью Rotate_grade. .

Язык кода:java
копировать
/**
     * Интерфейс данных YV12
     *
     * @param data: YV12 data
     *
     * @param width: ширина изображения
     *
     * @param height: высота изображения
     *
     * @param y_stride:  размер шага в сторону
     *
     * @param v_stride: размер шага v-стороны
     *
     * @param u_stride: длина шага U-образного лица
     *
     * rotation_degree: вращать по часовой стрелке, Должно быть 0, 90, 180, 270
     *
     * @return {0} if successful
     */
    public native int SmartPublisherOnYV12Data(long handle, byte[] data, int width, int height, int y_stride,  int v_stride, int u_stride, int rotation_degree);
Интерфейс данных YUV

Поддерживает стандартную стыковку интерфейса данных I420, нет необходимости вдаваться в подробности:

Язык кода:java
копировать
/**
	 * Уровень доставки изображения I420
	 *
	 * @param index: индекс слоя, Должно быть больше или равно 0
	 *
	 * @param left: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param top: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param y_plane: данные изображения в плоскости Y
	 *
	 * @param y_offset: смещение изображения, Основная цель этого — создание клипов. Обычно передается 0.
	 *
	 * @param y_row_stride: stride information
	 *
	 * @param u_plane: данные изображения самолета u
	 *
	 * @param u_offset: смещение изображения, Основная цель этого — создание клипов. Обычно передается 0.
	 *
	 * @param u_row_stride: stride information
	 *                    *
	 * @param v_plane: данные изображения v плоскости
	 *
	 * @param v_offset: смещение изображения, Основная цель этого — создание клипов. Обычно передается 0.
	 *
	 * @param v_row_stride: stride information
	 *
	 * @param width: width, Должно быть больше 1, и должно быть четное число
	 *
	 * @param height: height, Должно быть больше 1, и должно быть четное число
	 *
	 * @param  is_vertical_flip: Стоит ли переворачивать вертикально, 0 не переворачивается, 1 флип
	 *
	 * @param  is_horizontal_flip: переворачивать ли по горизонтали, 0 не переворачивается, 1 флип
	 *
	 * @param  scale_width: Ширина шкалы должна быть четным числом, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_height: увеличить масштаб, Должно быть четное число, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_filter_mode: качество масштабирования, Введите 0 и используйте скорость по умолчанию. Дополнительный диапазон уровней: [1,3]. Чем больше значение, тем лучше качество масштабирования. Но чем медленнее скорость
	 *
	 * @param  rotation_degree: вращать по часовой стрелке, Должно быть 0, 90, 180, 270, Примечание. Вращение масштабирует, Сделайте это после вертикальной/водной инверсии, Пожалуйста, обратите внимание на заказ
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageI420ByteBuffer(long handle, int index, int left, int top,
												   ByteBuffer y_plane, int y_offset, int y_row_stride,
												   ByteBuffer u_plane, int u_offset, int u_row_stride,
												   ByteBuffer v_plane, int v_offset, int v_row_stride,
												   int width, int height, int is_vertical_flip,  int is_horizontal_flip,
												   int scale_width,  int scale_height, int scale_filter_mode,
												   int rotation_degree);
NV21 на I420 и поверните

Этот интерфейс также в основном используется для стыковки определенных типов данных. Данные NV21 можно напрямую передавать в I420, а затем стыковать. Параметры интерфейса относительно просты и не будут описываться подробно.

Язык кода:java
копировать
/**
	 * NV21 преобразован в I420 и повернут
	 *
	 * @param src: nv21 data
	 *
	 * @param dst: Выход I420 data
	 *
	 * @param width: ширина изображения
	 *
	 * @param height: высота изображения
	 *
	 * rotation_degree: вращать по часовой стрелке, Должно быть 0, 90, 180, 270
	 *
	 * @return {0} if successful
	 */
	public native int SmartPublisherNV21ToI420Rotate(long handle, byte[] src, int src_y_stride, int src_uv_stride, byte[] dst,
													 int dst_y_stride, int dst_u_stride, int dst_v_stride,
													 int width, int height,
													 int rotation_degree);
RGBA

RGBA в основном используется в сценариях совместного использования экрана.

Язык кода:java
копировать
/**
    * Set live video data(no encoded data).
    *
    * @param data: RGBA data
    * 
    * @param rowStride: stride information
    * 
    * @param width: width
    * 
    * @param height: height
    *
    * @return {0} if successful
    */
    public native int SmartPublisherOnCaptureVideoRGBAData(long handle,  ByteBuffer data, int rowStride, int width, int height);

    /**
     * Доставка обрезанных данных RGBA
     *
     * @param data: RGBA data
     *
     * @param rowStride: stride information
     *
     * @param width: width
     *
     * @param height: height
     *
     * @param clipedLeft: левый;  clipedTop: начальство; clipedwidth: Ширина после обрезки; clipedHeight: Высота после обрезки; Убедитесь, что ширина и высота после обрезки являются четными числами.
     *
     * @return {0} if successful
     */
    public native int SmartPublisherOnCaptureVideoClipedRGBAData(long handle,  ByteBuffer data, int rowStride, int width, int height, int clipedLeft, int clipedTop, int clipedWidth, int clipedHeight);

    /**
     * Set live video data(no encoded data).
     *
     * @param data: ABGR flip вертикальный (перевернуть вертикально) data
     *
     * @param rowStride: stride information
     *
     * @param width: width
     *
     * @param height: height
     *
     * @return {0} if successful
     */
    public native int SmartPublisherOnCaptureVideoABGRFlipVerticalData(long handle,  ByteBuffer data, int rowStride, int width, int height);
RGB565

Тип данных RGB565 также в основном используется для захвата экрана.

Язык кода:java
копировать
/**
     * Set live video data(no encoded data).
     *
     * @param data: RGB565 data
     *
     * @param row_stride: stride information
     *
     * @param width: width
     *
     * @param height: height
     *
     * @return {0} if successful
     */
    public native int SmartPublisherOnCaptureVideoRGB565Data(long handle,ByteBuffer data, int row_stride, int width, int height);
NV12、NV21
Язык кода:java
копировать
/**
	 * Уровень доставки изображения NV21
	 *
	 * @param index: индекс слоя, Должно быть больше или равно 0
	 *
	 * @param left: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param top: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param y_plane: данные изображения в плоскости Y
	 *
	 * @param y_offset: смещение изображения, Основная цель этого — создание клипов. Обычно передается 0.
	 *
	 * @param y_row_stride: stride information
	 *
	 * @param uv_plane: uданные изображения v плоскости
	 *
	 * @param uv_offset: смещение изображения, Основная цель этого — создание клипов. Обычно передается 0.
	 *
	 * @param uv_row_stride: stride information
	 *
	 * @param width: width, Должно быть больше 1, и должно быть четное число
	 *
	 * @param height: height, Должно быть больше 1, и должно быть четное число
	 *
	 * @param  is_vertical_flip: Стоит ли переворачивать вертикально, 0 не переворачивается, 1 флип
	 *
	 * @param  is_horizontal_flip: переворачивать ли по горизонтали, 0 не переворачивается, 1 флип
	 *
	 * @param  scale_width: Ширина шкалы должна быть четным числом, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_height: увеличить масштаб, Должно быть четное число, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_filter_mode: качество масштабирования, Введите 0 и используйте скорость по умолчанию. Дополнительный диапазон уровней: [1,3]. Чем больше значение, тем лучше качество масштабирования. Но чем медленнее скорость
	 *
	 * @param  rotation_degree: вращать по часовой стрелке, Должно быть 0, 90, 180, 270, Примечание. Вращение масштабирует, Сделайте это после вертикальной/водной инверсии, Пожалуйста, обратите внимание на заказ
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageNV21ByteBuffer(long handle, int index, int left, int top,
													   ByteBuffer y_plane, int y_offset, int y_row_stride,
												       ByteBuffer uv_plane, int uv_offset, int uv_row_stride,
												       int width, int height, int is_vertical_flip,  int is_horizontal_flip,
													   int scale_width,  int scale_height, int scale_filter_mode,
													   int rotation_degree);


	/**
	 * Уровень доставки изображения NV21, Подробные инструкции см. в PostLayerImageNV21ByteBuffer.
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageNV21ByteArray(long handle, int index, int left, int top,
												   byte[] y_plane, int y_offset, int y_row_stride,
												   byte[] uv_plane, int uv_offset, int uv_row_stride,
												   int width, int height, int is_vertical_flip,  int is_horizontal_flip,
												   int scale_width,  int scale_height, int scale_filter_mode,
												   int rotation_degree);


	/**
	 * Образ уровня доставки NV12, Подробные инструкции см. в PostLayerImageNV21ByteBuffer.
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageNV12ByteBuffer(long handle, int index, int left, int top,
												   ByteBuffer y_plane, int y_offset, int y_row_stride,
												   ByteBuffer uv_plane, int uv_offset, int uv_row_stride,
												   int width, int height, int is_vertical_flip,  int is_horizontal_flip,
												   int scale_width,  int scale_height, int scale_filter_mode,
												   int rotation_degree);


	/**
	 * Образ уровня доставки NV12, Подробные инструкции см. в PostLayerImageNV21ByteBuffer.
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageNV12ByteArray(long handle, int index, int left, int top,
												  byte[] y_plane, int y_offset, int y_row_stride,
												  byte[] uv_plane, int uv_offset, int uv_row_stride,
												  int width, int height, int is_vertical_flip,  int is_horizontal_flip,
												  int scale_width,  int scale_height, int scale_filter_mode,
												  int rotation_degree);
RGBA8888、RGBX8888
Язык кода:java
копировать
/**
	 * Изображение слоя доставки RGBA8888, если альфа-канал не требуется, Пожалуйста, используйте интерфейс RGBX8888, Высокая эффективность
	 *
	 * @param index: индекс слоя, Должно быть больше или равно 0, Примечание. Если индекс равен 0, альфа-канал будет игнорироваться.
	 *
	 * @param left: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param top: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param rgba_plane: rgba данные изображения
	 *
	 * @param offset: смещение изображения, Основная цель - создание клипов. Обычно проходит 0
	 *
	 * @param row_stride: stride information
	 *
	 * @param width: width, Должно быть больше 1, Если это нечетное число, будет уменьшено на 1
	 *
	 * @param height: height, Должно быть больше 1, Если это нечетное число, будет уменьшено на 1
	 *
	 * @param  is_vertical_flip: Стоит ли переворачивать вертикально, 0 не переворачивается, 1 флип
	 *
	 * @param  is_horizontal_flip: переворачивать ли по горизонтали, 0 не переворачивается, 1 флип
	 *
	 * @param  scale_width: Ширина шкалы должна быть четным числом, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_height: увеличить масштаб, Должно быть четное число, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_filter_mode: качество масштабирования, Введите 0 и используйте скорость по умолчанию. Дополнительный диапазон уровней: [1,3]. Чем больше значение, тем лучше качество масштабирования. Но чем медленнее скорость
	 *
	 * @param  rotation_degree: вращать по часовой стрелке, Должно быть 0, 90, 180, 270, Примечание. Вращение масштабирует, Сделайте это после вертикальной/водной инверсии, Пожалуйста, обратите внимание на заказ
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageRGBA8888ByteBuffer(long handle, int index, int left, int top,
											 ByteBuffer rgba_plane, int offset, int row_stride, int width, int height,
											 int is_vertical_flip,  int is_horizontal_flip,
											 int scale_width,  int scale_height, int scale_filter_mode,
											 int rotation_degree);


	/**
	 * Уровень доставки изображения RGBA8888, Подробные инструкции см. в PostLayerImageRGBA8888ByteBuffer.
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageRGBA8888ByteArray(long handle, int index, int left, int top,
													  byte[] rgba_plane, int offset, int row_stride, int width, int height,
													  int is_vertical_flip,  int is_horizontal_flip,
													  int scale_width,  int scale_height, int scale_filter_mode,
													  int rotation_degree);


	/**
	 * Уровень доставки изображения RGBA8888, Подробные инструкции см. в PostLayerImageRGBA8888ByteBuffer.
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageRGBA8888Native(long handle, int index, int left, int top,
												   long rgba_plane, int offset, int row_stride, int width, int height,
												   int is_vertical_flip,  int is_horizontal_flip,
												   int scale_width,  int scale_height, int scale_filter_mode,
												   int rotation_degree);


	/**
	 * Уровень доставки изображения RGBX8888
	 *
	 * @param index: индекс слоя, Должно быть больше или равно 0
	 *
	 * @param left: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param top: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param rgbx_plane: rgbx данные изображения
	 *
	 * @param offset: смещение изображения, Основная цель этого — создание клипов. Обычно передается 0.
	 *
	 * @param row_stride: stride information
	 *
	 * @param width: width, Должно быть больше 1, Если это нечетное число, будет уменьшено на 1
	 *
	 * @param height: height, Должно быть больше 1, Если это нечетное число, будет уменьшено на 1
	 *
	 * @param  is_vertical_flip: Стоит ли переворачивать вертикально, 0 не переворачивается, 1 флип
	 *
	 * @param  is_horizontal_flip: переворачивать ли по горизонтали, 0 не переворачивается, 1 флип
	 *
	 * @param  scale_width: Ширина шкалы должна быть четным числом, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_height: увеличить масштаб, Должно быть четное число, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_filter_mode: качество масштабирования, Введите 0 и используйте скорость по умолчанию. Дополнительный диапазон уровней: [1,3]. Чем больше значение, тем лучше качество масштабирования. Но чем медленнее скорость
	 *
	 * @param  rotation_degree: вращать по часовой стрелке, Должно быть 0, 90, 180, 270, Примечание. Вращение масштабирует, Сделайте это после вертикальной/водной инверсии, Пожалуйста, обратите внимание на заказ
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageRGBX8888ByteBuffer(long handle, int index, int left, int top,
													   ByteBuffer rgbx_plane, int offset, int row_stride, int width, int height,
													   int is_vertical_flip,  int is_horizontal_flip,
													   int scale_width,  int scale_height, int scale_filter_mode,
													   int rotation_degree);


	/**
	 * Уровень доставки изображения RGBX8888, Подробные инструкции см. в PostLayerImageRGBX8888ByteBuffer.
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageRGBX8888ByteArray(long handle, int index, int left, int top,
													  byte[] rgbx_plane, int offset, int row_stride, int width, int height,
													  int is_vertical_flip,  int is_horizontal_flip,
													  int scale_width,  int scale_height, int scale_filter_mode,
													  int rotation_degree);


	/**
	 * Уровень доставки изображения RGBX8888, Подробные инструкции см. в PostLayerImageRGBX8888ByteBuffer.
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageRGBX8888Native(long handle, int index, int left, int top,
												   long rgbx_plane, int offset, int row_stride, int width, int height,
												   int is_vertical_flip,  int is_horizontal_flip,
												   int scale_width,  int scale_height, int scale_filter_mode,
												   int rotation_degree);


	/**
	 * Уровень доставки изображения RGB888
	 *
	 * @param index: индекс слоя, Должно быть больше или равно 0
	 *
	 * @param left: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param top: Координаты верхнего левого угла наложения слоя, Для слоя 0 передайте 0
	 *
	 * @param rgb_plane: rgb888 данные изображения
	 *
	 * @param offset: смещение изображения, Основная цель этого — создание клипов. Обычно передается 0.
	 *
	 * @param row_stride: stride information
	 *
	 * @param width: width, Должно быть больше 1, Если это нечетное число, будет уменьшено на 1
	 *
	 * @param height: height, Должно быть больше 1, Если это нечетное число, будет уменьшено на 1
	 *
	 * @param  is_vertical_flip: Стоит ли переворачивать вертикально, 0 не переворачивается, 1 флип
	 *
	 * @param  is_horizontal_flip: переворачивать ли по горизонтали, 0 не переворачивается, 1 флип
	 *
	 * @param  scale_width: Ширина шкалы должна быть четным числом, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_height: увеличить масштаб, Должно быть четное число, 0 или отрицательные числа не масштабируются
	 *
	 * @param  scale_filter_mode: качество масштабирования, Введите 0 и используйте скорость по умолчанию. Дополнительный диапазон уровней: [1,3]. Чем больше значение, тем лучше качество масштабирования. Но чем медленнее скорость
	 *
	 * @param  rotation_degree: вращать по часовой стрелке, Должно быть 0, 90, 180, 270, Примечание. Вращение масштабирует, Сделайте это после вертикальной/водной инверсии, Пожалуйста, обратите внимание на заказ
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageRGB888Native(long handle, int index, int left, int top,
													   long rgb_plane, int offset, int row_stride, int width, int height,
													   int is_vertical_flip,  int is_horizontal_flip,
													   int scale_width,  int scale_height, int scale_filter_mode,
													   int rotation_degree);
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose