Commit Graph

63 Commits

Author SHA1 Message Date
zihaomu
934e6899f8
Merge pull request #25809 from zihaomu:imread_rgb_flag
imgcodecs: Add rgb flag for imread and imdecode #25809

Try to `imread` images by RGB to save R-B swapping costs.

## How to use it?
```
img_rgb = cv2.imread("PATH", IMREAD_COLOR_RGB) # OpenCV decode the image by RGB format.
```

## TODO
- [x] Fix the broken code
- [x] Add imread rgb test
- [x] Speed test of rgb mode.

## Performance test

| file name | IMREAD_COLOR  | IMREAD_COLOR_RGB |
| --------- | ------ | --------- |
| jpg01     | 284 ms | 277 ms    |
| jpg02     | 376 ms | 366 ms    |
| png01     | 62 ms  | 60 ms     |
| Png02     | 97 ms  | 94 ms     |

Test with [image_test.zip](https://github.com/user-attachments/files/15982949/image_test.zip)
```.cpp
string img_path = "/Users/mzh/work/data/image_test/png02.png";
int loop = 20;

TickMeter t;

double t0 = 10000;
for (int i = 0; i < loop; i++)
{
    t.reset();
    t.start();
    img_bgr = imread(img_path, IMREAD_COLOR);
    t.stop();

    if (t.getTimeMilli() < t0) t0 = t.getTimeMilli();
}

std::cout<<"bgr time = "<<t0<<std::endl;

t0 = 10000;
for (int i = 0; i < loop; i++)
{
    t.reset();
    t.start();
    img_rgb = imread(img_path, IMREAD_COLOR_RGB);
    t.stop();
    if (t.getTimeMilli() < t0) t0 = t.getTimeMilli();
}
std::cout<<"rgb time = "<<t0<<std::endl;
``` 
### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [ ] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake
2024-07-03 10:58:25 +03:00
Vincent Rabaud
fc5eb101bf
Merge pull request #25447 from vrabaud:tiff
Remove unnecessary FIXIT section in grfmt_tiff.cpp #25447

No int64/uint64 is used in the code anymore.

grfmt_tiff.hpp includes the tiff.h header inside of the tiff_dummy_namespace declaration. One implication of this is that all namespaced declarations made in tiff.h become qualified with tiff_dummy_namespace::.

Because tiff.h includes standard library headers, the std namespace declarations are converted to tiff_dummy_namespace::std declarations.

Subsequently, grfmt_tiff.hpp declares using namespace tiff_dummy_namespace;.

This can lead to an ambiguity error during the resolution of the std namespace.

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
2024-04-19 13:00:27 +03:00
Kumataro
bbfded21ac imgcodecs: tiff: to avoid using TIFFTAG_* directly for imwrite() params.
Normaly, we sets IMWRITE_* flags for imwrite() params.
But imgcodecs expects to use some TIFFTAG_* directory.
This patch introduce IMWRITE_TIFF_ROWSPERSTRIP and
IMWRITE_TIFF_PREDICTOR instead of TIFFTAG_*.
2024-03-23 10:16:30 +09:00
Michael Klatis
52f3f5a3f6
libtiff upgrade to version 4.6.0 (#25096)
* libtiff upgrade to version 4.6.0

* fix tiffvers.h cmake generation

* temp: force build 3rd party deps from source

* remove libport.h and spintf.c

* cmake fixes

* don't use tiff_dummy_namespace on windows

* introduce numeric_types namespace alias

* include cstdint

* uint16_t is not a numeric_types type

* fix uint16 and uint32 type defs

* use standard c++ types

* remove unused files

* remove more unused files

* revert build 3rd party code from source

---------

Co-authored-by: Misha Klatis <misha.klatis@autodesk.com>
2024-03-22 04:08:16 +03:00
Sean McBride
5fb3869775
Merge pull request #23109 from seanm:misc-warnings
* Fixed clang -Wnewline-eof warnings
* Fixed all trivial clang -Wextra-semi and -Wc++98-compat-extra-semi warnings
* Removed trailing semi from various macros
* Fixed various -Wunused-macros warnings
* Fixed some trivial -Wdocumentation warnings
* Fixed some -Wdocumentation-deprecated-sync warnings
* Fixed incorrect indentation
* Suppressed some clang warnings in 3rd party code
* Fixed QRCodeEncoder::Params documentation.

---------

Co-authored-by: Alexander Smorkalov <alexander.smorkalov@xperience.ai>
2023-10-06 13:33:21 +03:00
Kumataro
4b1a4bdb49 imgcodecs: fix libtiff homepage 2023-08-27 19:49:37 +09:00
Kumataro
d2dbaa4cd1
Merge pull request #23433 from Kumataro:4.x-fix23416
imgcodecs: tiff: Support to encode for CV_32S with compression params

Fix https://github.com/opencv/opencv/issues/23416

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake
2023-04-11 10:50:47 +03:00
Alexander Alekhin
762481411d Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2022-10-15 16:44:47 +00:00
Kumataro
2f79b1b087
Merge pull request #22404 from Kumataro:3.4-fix22388_2
* imgcodecs: tiff: Reduce memory usage to read 16bit image.

* imgcodecs: tiff: Reduce memory usage to read 8bit images

* imgcodecs: tiff: split basic test and full test.

* imgcodecs: tiff: fix to warning C4244

* imgcodecs: tiff: fix to warning C4244
2022-10-03 18:24:15 +03:00
Harvey
a4b191a7e0 4-bit_palette_color 2022-08-29 10:21:17 +08:00
OpenCV Developers
d9a444ca1a Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2022-05-14 11:23:21 +00:00
xiongzhen
2238ac7d59 Apply TIFFTAG_PREDICTOR option for LZW, DEFLATE and ADOBE_DEFLATE compression cases for smaller files. 2022-05-13 09:44:25 +03:00
Pierre Chatelier
6390b50d6e
Merge pull request #21701 from chacha21:tiff_10_12_14
Add 10-12-14bit (integer) TIFF decoding support

* Add 12bit (integer) TIFF decoding support

An (slow) unpacking step is inserted when the native bpp is not equal to the dst_bpp

Currently, I do not know if there can be several packing flavours in TIFF data.

* added tests

* move sample files to opencv_extra

* added 10b and 14b unpacking

* fix compilation for non MSVC compilers by using more standard typedefs

* yet another typdef usage change to fix buildbot Mac compilation

* fixed unpacking of partial packets

* fixed warnings returned by buildbot

* modifications as suggested by reviewer
2022-03-11 21:07:12 +03:00
Alexander Alekhin
2b7803dbac imgcodecs: add runtime checks to validate input
backport of commit: f9b1dbe2ac
2022-02-15 16:33:35 +00:00
Alexander Alekhin
f9b1dbe2ac imgcodecs: add runtime checks to validate input 2022-02-15 11:48:09 +00:00
Harvey
f4a7754cc0
Merge pull request #21428 from Harvey-Huang:TIFF
TiffEncoder write support more depth type

* TiffEncoder write support more depth type

* testing code

* update testing code

* add fallthrough
2022-01-31 17:54:27 +00:00
Suleyman TURKMEN
f1857030b5 bigtiff images reading 2022-01-16 11:49:10 +03:00
Harvey
c3e27bcf87
Merge pull request #21400 from Harvey-Huang:master
tiff need check TIFFTAG_SAMPLEFORMAT, should not always use unsigned.
2022-01-11 16:51:50 +00:00
Harvey
af154e3053 fixed bug: opencv read tif file convert Palette color image as grayscale image 2021-10-27 14:10:11 +08:00
shijiayuan
4e97c69792
Merge pull request #17275 from shijiayuan:fixbug
* fix bug for CHECK issue

* remove chack for bpp

* add test for tif file

* add test for tiff file

* change the test name

* use proper bpp value, use clear test names
2020-05-25 18:49:37 +00:00
Alexander Alekhin
e2a5a6a05c Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2019-09-25 18:32:44 +00:00
Alexander Alekhin
ad2854c8b3 imgcodecs: add check image.empty() in imwrite()/imencode() 2019-09-22 10:45:00 +00:00
Alexander Alekhin
db7f689728 imgcodecs(tiff): add more checks
backporting of commit: f6230ae019
2019-06-11 19:22:24 +00:00
Alexander Alekhin
f6230ae019 imgcodecs(tiff): add more checks
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=15154
2019-06-10 21:00:20 +00:00
Alexander Alekhin
43467a2ac7 Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2019-05-28 18:29:48 +00:00
Jan Starzynski
fb9c083a51 handle all orientations properly 2019-05-23 16:51:25 +02:00
Alexander Alekhin
f7856a0f35 imgcodecs(tiff): update tile size checks
backporting of commit: 25247b9f6e
2019-04-21 18:36:39 +00:00
Alexander Alekhin
25247b9f6e imgcodecs(tiff): update tile size checks
oss-fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14185
oss-fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14321
2019-04-20 20:13:47 +00:00
Alexander Alekhin
c9fc27b337 Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2019-04-05 19:08:23 +00:00
Alexander Alekhin
0c490accae imgcodecs(tiff): check TIFF tile size
oss-fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13280
oss-fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13283
2019-04-05 18:13:15 +03:00
Alexander Alekhin
473941c341 Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2019-04-04 18:09:24 +00:00
Alexander Alekhin
ba5ddd6499 imgcodecs(tiff): sanitize tiff decoder
- more checks
- drop separate branches for 32FC1/32FC3(read) handling
- added for 32F/64F non-compressed
- added tests for 32FC3 (RAW + hdr SGILOG compression)
- added test 64FC1
- dump tiff errors on stderr
2019-04-04 14:16:53 +03:00
Alexander Alekhin
2ece029fe0 imgcodecs(tiff): avoid leak of helper struct on malformed inputs
backporting of commit: 45428b897f
2019-04-01 14:08:40 +00:00
Alexander Alekhin
45428b897f imgcodecs(tiff): avoid leak of helper struct on malformed inputs
oss-fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13285
2019-03-31 11:50:33 +00:00
Alexander Alekhin
8c0b0714e7 Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2019-03-11 19:20:22 +00:00
Rajkiran Natarajan
40af53b1d6 issue-13921: Support setting compression setting for writing tiff images 2019-03-09 15:48:21 -05:00
Vadim Pisarevsky
11eafca3e2
removed C API in the following modules: photo, video, imgcodecs, videoio (#13060)
* removed C API in the following modules: photo, video, imgcodecs, videoio

* trying to fix various compile errors and warnings on Windows and Linux

* continue to fix compile errors and warnings

* continue to fix compile errors, warnings, as well as the test failures

* trying to resolve compile warnings on Android

* Update cap_dc1394_v2.cpp

fix warning from the new GCC
2018-11-09 00:52:09 +03:00
Ilari Venäläinen
e6c41f0de6 Merge pull request #12989 from venalil:fix_thresholded_tiff_read
* Fix reading of black-and-white (thresholded) TIFF images

I recently updated my local OpenCV version to 3.4.3 and found out that
I could not read my TIFF images related to my project. After debugging I
found out that there has been some static analysis fixes made
that accidentally have broken reading those black-and-white TIFF images.

Commit hash in which reading of mentioned TIFF images has been broken:
cbb1e867e5

Basically the fix is to revert back to the same functionality that has been there before,
when black-and-white images are read bpp (bitspersample) is 1.
Without the case 1: this TiffDecoder::readHeader() function always return false.

* Added type and default error message

* Added stdexcept include

* Use CV_Error instead of throw std::runtime_error

* imgcodecs(test): add TIFF B/W decoding tests
2018-11-01 14:34:34 +03:00
Maksim Shabunin
cbb1e867e5 More issues found by static analysis 2018-07-24 16:04:42 +03:00
Alexander Alekhin
b09a4a98d4 opencv: Use cv::AutoBuffer<>::data() 2018-07-04 19:11:29 +03:00
Rajkiran Natarajan
4668836071 Support for setting TIFF DPI info in imwrite 2018-04-04 21:20:16 -07:00
Maksim Shabunin
7c855aa3e1 Fixed two issues found by static analysis 2018-02-26 00:16:02 +03:00
Maksim Shabunin
92e9d4ec3a Fixed several issues detected by static analysis 2018-02-22 17:11:33 +03:00
Rostislav Vasilikhin
27b1f8f446 imwrite for multipage images implemented 2018-02-20 19:08:45 +03:00
Vitaly Tuzov
24ee7b5080 Fix for vertically flipped tiff files reading 2018-02-19 18:49:19 +03:00
Coralie RACHEX
16821b877c Merge pull request #10493 from RachexCoralie:tiff32FC1Codec
* Load and save tiff images in CV_32FC1 format (1 channel of floats).

* Add test

* Fix error handling and resources leak. Improve test.
2018-01-04 15:51:58 +03:00
Alexander Alekhin
08b5dc64af imgcodecs(tiff): drop legacy code
Drop code under *undefined* HAVE_TIFF
(violates several policies, like a way to turn off tiff support)
2017-09-24 22:36:17 +00:00
saskatchewancatch
4832c24ef7 Allow TIFF min=white PHOTOMETRIC interpretation images to be read unchanged 2017-09-05 21:43:33 -06:00
Alexander Alekhin
c515e878ab build: eliminate Win32 warnings 2017-08-24 16:07:12 +03:00
Jeremy Maitin-Shepard
350d483a70 grfmt_tiff: support in-memory TIFF encoding and decoding
Previously, only file-based encoding and decoding were supported with
the libtiff library, leading to the possible use of temporary files.

This fixes issue #8483.
2017-07-31 10:22:11 -07:00