У меня есть OV7670, и я настраиваю его для чтения Arucomarker в чистом черном / белом. A 1 указывает белый, a 0 указывает на черный. Я хотел бы избавиться от этих вертикальных линий, чтобы получить красивое и чистое изображение.
Это мои регистральные значения, которые я использую, чтобы инициировать камеру:
Это мои регистральные значения, которые я использую, чтобы инициировать камеру: p> p> p> p>
Это мои регистральные значения, которые я использую, чтобы инициировать камеру:
Это мои регистральные значения:
Это мои регистральные значения:
Это реестр.
У меня есть OV7670, и я настраиваю его для чтения Arucomarker в чистом черном / белом. A 1 указывает белый, a 0 указывает на черный. Я хотел бы избавиться от этих вертикальных линий, чтобы получить красивое и чистое изображение.
Это мои регистральные значения, которые я использую, чтобы инициировать камеру: Это мои регистральные значения, которые я использую, чтобы инициировать камеру: p> p> p> p> Это мои регистральные значения, которые я использую, чтобы инициировать камеру: Это мои регистральные значения: Это мои регистральные значения: Это реестр.[code]static const struct { uint8_t reg; uint8_t val; } ov7670_init_register_values[] = { {0x11, 0x06}, // CLKRC (prescaler) {0x12, 0x00}, // COM7: Select YUV {0x15, 0x30}, // COM10: PCLK Falling edge sampling {0x8C, 0x00}, // RGB444 disable {0x40, 0x00}, // COM15: Full range output, YUV422 {0x3A, 0x04}, // TSLB: YUYV order {0x32, 0x80}, // HREF control {0x17, 0x16}, // HSTART {0x18, 0x04}, // HSTOP {0x19, 0x02}, // VSTART {0x1A, 0x7A}, // VSTOP {0x03, 0x0A}, // VREF {0x0C, 0x00}, // COM3: No scaling, no DCW {0x3E, 0x00}, // COM14: No scaling, normal PCLK {0x42, 0x00}, // COM17 = 0x00 (disable test pattern) {0x73, 0xF0}, // Scaling PCLK divider {0x4F, 0x80}, // Matrix cf 1 {0x50, 0x80}, // Matrix cf 2 {0x51, 0x00}, // Matrix cf 3 {0x52, 0x22}, // Matrix cf 4 {0x53, 0x5E}, // Matrix cf 5 {0x54, 0x80}, // Matrix cf 6 {0x55, 0x00}, // BRIGHTNESS (default 0x00) {0x56, 0x40}, // Contrast (default 0x40)
{0xFF, 0xFF}, // END marker }; < /code> Во -первых, я передаю сброс (0x12, 0x80) с задержкой 10 мс после. < /p> Метод выборки моего изображения: < /p> void capture_image(uint8_t *p_bytes, int *p_byte_counter) { *p_bytes = 0; uint8_t bit_counter = 0; bool odd = true; uint8_t byte = 0;
unsigned int key = irq_lock(); // Disable interrupts for timing critical section
wait_for_vsync(); // wait until vsync pin is pulled down while(!get_value(VSYNC_PIN)) { wait_for_low(PCLK_PIN, true); // wait until PCLK is pulled down or vsync is pulled up if(get_value(VSYNC_PIN)) break; // cancel if vsync is high
// Read pixel value (1 or 0) uint8_t pixel = !!(NRF_P0->IN & PIXEL_PIN_7_MASK);
// Branchless odd pixel selection // pixel contributes only if odd == true (take only Y bytes) if(odd) { byte = (byte function received_bytes_to_pixels(self): for x in self._bytes: for i in range(8): self._pixels.append((x >> i) & 1) < /code> , а затем < /p> arr = self._pixels
# Reshape the 1D array into 2D (height = image_y, width = image_x) img_array = np.array(arr, dtype=np.uint8).reshape((image_y, image_x))
img_array *= 255 # scale to grayscale img = Image.fromarray(img_array, mode='L') # 'L' = (8-bit pixels, black and white)
img.show() img.save("output.png") [/code] [b] edit [/b] по просьбе Мартина I сделал изображение креста слегка угловым, и именно так выглядит результат этого креста.>